https://bugs.winehq.org/show_bug.cgi?id=50279
Bug ID: 50279 Summary: Registration free COM Product: Wine Version: 6.0-rc1 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ole32 Assignee: wine-bugs@winehq.org Reporter: bvandermerwe@kbcat.com Distribution: ---
Created attachment 68829 --> https://bugs.winehq.org/attachment.cgi?id=68829 Appx.exe.manifest
At first I thought wine does not support registration free COM, but according to bug 25340 it does, and should be working. However, it does not work in some situations.
Consider a 32 bit Windows application (composed of one small EXE and many linked DLLs), which has the attached manifest file embedded via:
mt.exe /manifest Appx.exe.manifest /outputresource:Appx.exe;#1
Now in the 32 bit application you have this C++ code:
hr = ::CoCreateInstance(CLSID_KCUnitop, NULL, CLSCTX_INPROC_SERVER, IID_IKCUnitopSimulation, (void**)&m_pKCHunitopSimulation);
Then it fails saying the component is not registered. CLSID_KCUnitop comes from:
MIDL_DEFINE_GUID(CLSID, CLSID_KCUnitop,0xC4203DFD,0x03FA,0x11D3,0x9B,0xC7,0x00,0x50,0x04,0x09,0xFB,0x41);
This corresponds to the second comclass entry in the manifest file:
<file name="kcunitop.dll"> <comClass clsid="{27345ECA-2B0E-11D3-BF76-0090271CC18F}" threadingModel="Apartment"/> <comClass clsid="{C4203DFD-03FA-11D3-9BC7-00500409FB41}" threadingModel="Apartment"/> </file>
Registering the dll first using 'regsvr32 kcunitop.dll' does work around the issue.
Sadly, I cannot provide the entire application. Perhaps the person who works on this component can read through this and go "Ah we need to check for more than one comClass entry" or "Oh you have curly brackets which we need to ignore" or "Ah the #1 is causing it to not find the manifest" or "The leading 0 is causing isses". (one can hope :-) )
I tried wine 5.0 onwards through 6.0 and the behavior is the same in all of them.