[Bug 8780] Multiple applications using native vbscript/jscript override need oleaut32.CreateTypeLib implementation (Visual Studio 20XX, Future Pinball, ...)

WineHQ Bugzilla wine-bugs at winehq.org
Mon Jan 27 13:53:36 CST 2020


https://bugs.winehq.org/show_bug.cgi?id=8780

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                URL|http://www.futurepinball.co |https://web.archive.org/web
                   |m/download.html             |/20110917035535/http://memb
                   |                            |ers.iinet.net.au/~cleathley
                   |                            |/downloads/FuturePinballSet
                   |                            |up_v1.9.1.20101231.exe

--- Comment #30 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

adding some stable links via Internet Archive:

https://web.archive.org/web/20060503144222/http://www.futurepinball.com/downloads/Sci-Fi%20Classic.exe

https://web.archive.org/web/20110917035535/http://members.iinet.net.au/~cleathley/downloads/FuturePinballSetup_v1.9.1.20101231.exe

https://web.archive.org/web/20190821173927/http://download.microsoft.com/download/8/B/5/8B5804AD-4990-40D0-A6AA-CE894CBBB3DC/VS2008ExpressENUX1397868.iso

Test with Future Pinball -> 'File' -> 'Table Launcher' (select on demo)

Prerequisite: 'winetricks -q wsh57' (native VBScript)

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Games/Future Pinball

$ WINEDEBUG=+seh,+relay,+ole,+variant wine ./Future\ Pinball.exe >>log.txt 2>&1
...
0063:Call oleaut32.LoadRegTypeLib(0053fa14,00000001,00000000,00000400,0032edb0)
ret=0a485ba2 
...
0063:trace:ole:LoadTypeLib (L"C:\\Games\\Future Pinball\\Future
Pinball.exe",0032EDB0)
0063:trace:ole:LoadTypeLibEx (L"C:\\Games\\Future Pinball\\Future
Pinball.exe",0,0032EDB0) 
...
0063:trace:ole:TLB_ReadTypeLib cache hit
0063:trace:ole:ITypeLib2_fnAddRef (039EF2E0) ref=2
0063:trace:ole:LoadTypeLibEx  returns 00000000 
...
0063:trace:ole:LoadRegTypeLib (IID: {fb22a459-4ad0-4cb3-b959-15158f7139f5})
load SUCCESS (039EF2E0)
0063:Ret  oleaut32.LoadRegTypeLib() retval=00000000 ret=0a485ba2
0063:Call oleaut32.CreateTypeLib(00000001,0a47c3d4 L"ConstDeb.tlb",0032ed54)
ret=0a494b6e
...
0063:fixme:ole:CreateTypeLib (1,L"ConstDeb.tlb",0032ED54), stub!
0063:Ret  oleaut32.CreateTypeLib() retval=80004005 ret=0a494b6e 
...
<lots of ITypeInfo_fnInvoke/DispCallFunc calls>
...
0063:Call oleaut32.SysAllocStringLen(03899b5c L"Microsoft VBScript runtime
error",00000020) ret=0a469d47 
...
0063:Call oleaut32.SysStringLen(030fbd34 L"Variable is undefined: 'deNone'")
ret=0a469d55 
--- snip ---

With Wine-Staging 5.0 it crashes.

--- snip ---
...
0009:Call oleaut32.CreateTypeLib(00000001,09b8c3d4 L"ConstDeb.tlb",0032ed44)
ret=09ba4b6e
...
0009:fixme:ole:CreateTypeLib (1, L"ConstDeb.tlb", 0032ED44): forwarding to
CreateTypeLib2
...
0009:trace:ole:CreateTypeLib2 (1,L"ConstDeb.tlb",0032ECC8) 
...
0009:trace:ole:ITypeLib2_fnQueryInterface (0313A0E0)->(IID:
{0002040f-0000-0000-c000-000000000046})
0009:trace:ole:ITypeLib2_fnAddRef (0313A0E0) ref=2
0009:trace:ole:ITypeLib2_fnRelease (0313A0E0) ref=1
0009:trace:ole:ITypeLib2_fnQueryInterface (0313A0E0)->(IID:
{00020406-0000-0000-c000-000000000046})
0009:trace:ole:ITypeLib2_fnAddRef (0313A0E0) ref=2
0009:trace:ole:ITypeLib2_fnRelease (0313A0E0) ref=1
0009:Ret  oleaut32.CreateTypeLib() retval=00000000 ret=09ba4b6e 
0009:Call oleaut32.SafeArrayCreate(0000000c,00000001,0032ed28) ret=09ba4b8c
0009:trace:variant:SafeArrayCreate (VT_VARIANT,1,0032ED28)
0009:trace:variant:SafeArrayAllocDescriptorEx (VT_VARIANT,1,0032EC98)
0009:trace:variant:SafeArrayAllocDescriptor (1,0032EC98)
...
0009:trace:variant:SafeArrayAllocDescriptor (1): 24 bytes allocated for
descriptor.
0009:trace:variant:SafeArrayAllocData (039836B0)
...
0009:trace:variant:SafeArrayAllocData 16 bytes allocated for data at 03138498
(1 objects).
0009:Ret  oleaut32.SafeArrayCreate() retval=039836b0 ret=09ba4b8c 
...
0009:trace:ole:ITypeLib2_fnGetTypeInfoCount (03985FD0)->count is 193
0009:trace:ole:ITypeLib2_fnGetTypeInfoType (03985FD0, 0, 0032ECF0)
0009:trace:ole:ITypeLib2_fnGetTypeInfoType (03985FD0, 1, 0032ECF0)
0009:trace:ole:ITypeLib2_fnGetTypeInfoType (03985FD0, 2, 0032ECF0) 
...
0009:trace:ole:ITypeLib2_fnGetTypeInfoType (03985FD0, 190, 0032ECF0)
0009:trace:ole:ITypeLib2_fnGetTypeInfoType (03985FD0, 191, 0032ECF0)
0009:trace:ole:ITypeLib2_fnGetTypeInfoType (03985FD0, 192, 0032ECF0)
...
0009:trace:ole:ITypeInfo_fnGetDocumentation (0397FAD8) memid 1073741840
Name(0032EC88) DocString(00000000) HelpContext(00000000) HelpFile(00000000)
...
0009:trace:ole:SysAllocStringLen L"ServiceKey"
0009:Call msvcrt.memcpy(039f1fb4,0398641c,00000014) ret=029c6259
0009:Ret  msvcrt.memcpy() retval=039f1fb4 ret=029c6259
0009:Call oleaut32.SysAllocString(039f1fb4 L"ServiceKey") ret=09ba44ac
...
0009:trace:ole:SysAllocStringLen L"ServiceKey"
...
0009:Call oleaut32.SysFreeString(039f1fb4 L"ServiceKey") ret=09ba46cf
0009:Call ntdll.RtlSizeHeap(00110000,00000000,039f1fb0) ret=0219a3a6
0009:Ret  ntdll.RtlSizeHeap() retval=00000020 ret=0219a3a6
0009:Ret  oleaut32.SysFreeString() retval=00000000 ret=09ba46cf
0009:Call msvcrt.??2 at YAPAXI@Z(00000038) ret=09ba4710
0009:Call ntdll.RtlAllocateHeap(02f20000,00000000,00000038) ret=7e59edb8
0009:Ret  ntdll.RtlAllocateHeap() retval=02f3c428 ret=7e59edb8
0009:Ret  msvcrt.??2 at YAPAXI@Z() retval=02f3c428 ret=09ba4710
0009:Call ntdll.RtlInitializeCriticalSection(02f3c444) ret=09b6b7a4
0009:Ret  ntdll.RtlInitializeCriticalSection() retval=00000000 ret=09b6b7a4
0009:trace:seh:raise_exception code=c0000005 flags=0 addr=0x9ba4747 ip=09ba4747
tid=0009
0009:trace:seh:raise_exception  info[0]=00000000
0009:trace:seh:raise_exception  info[1]=00000000
0009:trace:seh:raise_exception  eax=02f3c2f0 ebx=0397fad8 ecx=09b6b7b6
edx=7ffdf000 esi=02f3c428 edi=00000000
0009:trace:seh:raise_exception  ebp=0032eca8 esp=0032ec74 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010246
... 
--- snip ---

The staging patch doesn't look correct:

https://github.com/wine-staging/wine-staging/blob/master/patches/oleaut32-CreateTypeLib/0001-oleaut32-Implement-semi-stub-for-CreateTypeLib.patch

--- snip ---
+HRESULT WINAPI CreateTypeLib(SYSKIND syskind, LPCOLESTR file, ICreateTypeLib
**ctlib)
+{
+    ICreateTypeLib2 *typelib2;
+    HRESULT hres;
+
+    FIXME("(%d, %s, %p): forwarding to CreateTypeLib2\n", syskind,
debugstr_w(file), ctlib);
+
+    hres = CreateTypeLib2(syskind, file, &typelib2);
+    if(SUCCEEDED(hres))
+    {
+        hres = ICreateTypeLib2_QueryInterface(typelib2, &IID_ICreateTypeLib,
(void **)&ctlib);
+        ICreateTypeLib2_Release(typelib2);
+    }
+
+    return hres;
}
--- snip ---

'ctlib' is an "out parameter" pointer. Since it's already pointer-to-pointer it
would be incorrect to take the address. Change 'ICreateTypeLib2_QueryInterface(
..., (void **)&ctlib)' to 'ICreateTypeLib2_QueryInterface(  .., (void
**)ctlib)'

$ wine --version
wine-5.0-144-g9a9a1821a3

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list