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

Merge request reports

Loading