Fix the integration of PowerPoint add-in in MS Office 2016
Encountered an issue with PowerPoint add-in integration. Reviewing the logs revealed the problem was due to the lack of CLSID lookup via the CurVer section and incorrect handling of the PARAMFLAG_NONE flag.
A test was conducted in Windows to verify the handling of PARAMFLAG_NONE, PARAMFLAG_FIN, and PARAMFLAG_FOUT.
Test class:
interface ITest : IDispatch
{
[id(1)] HRESULT TestMethod(BSTR* value);
[id(2)] HRESULT TestMethodOut([out] BSTR* retVal);
[id(3)] HRESULT TestMethodIn([in] BSTR* inVal);
};
Results in Windows:
--------TestMethod--------
Variant type: 0x0008 (VT_BSTR)
[CTest::TestMethod] Hello from VT_BSTR
Invoke returned: 0x00000000
-------TestMethodIn-------
Variant type: 0x0008 (VT_BSTR)
[CTest::TestMethodIn] Hello from VT_BSTR
Invoke returned: 0x00000000
-------TestMethodOut-------
Variant type: 0x0008 (VT_BSTR)
[CTest::TestMethodOut] (null)
Invoke returned: 0x00000000
Results in Wine:
--------TestMethod--------
Variant type: 0x0008 (VT_BSTR)
[CTest::TestMethod] (null)
Invoke returned: 0x00000000
-------TestMethodIn-------
Variant type: 0x0008 (VT_BSTR)
[CTest::TestMethodIn] Hello from VT_BSTR
Invoke returned: 0x00000000
-------TestMethodOut-------
Variant type: 0x0008 (VT_BSTR)
[CTest::TestMethodOut] (null)
Therefore, parameters with the PARAMFLAG_NONE flag are implied to be input parameters in Windows and are handled accordingly as PARAMFLAG_FIN.
Added tests for the implemented changes. In the last two tests (their code is provided below), the CLSID is nullified in the guid_from_string function, which is why this test is left with a todo_wine tag.
clsid = CLSID_StdFont;
hr = CLSIDFromString(L"MyApp.DocumentTest.3", &clsid);
todo_wine
ok(IsEqualCLSID(&clsid, &CLSID_StdFont), "Unexpected clsid %s.\n", wine_dbgstr_guid(&clsid));
clsid = CLSID_StdFont;
hr = CLSIDFromString(L"MyApp.DocumentTest.5", &clsid);
todo_wine
ok(IsEqualCLSID(&clsid, &CLSID_StdFont), "Unexpected clsid %s.\n", wine_dbgstr_guid(&clsid));
Edited by Ivan Lyugaev