Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
a8ebda98
Commit
a8ebda98
authored
Oct 16, 2013
by
Andrew Eikum
Committed by
Alexandre Julliard
Oct 16, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oleaut32: For 64-bit, fallback on the win32 key if win64 key is empty for typelibs.
parent
fbffa893
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
153 additions
and
4 deletions
+153
-4
typelib.c
dlls/oleaut32/tests/typelib.c
+143
-2
tmarshal.c
dlls/oleaut32/tmarshal.c
+10
-2
No files found.
dlls/oleaut32/tests/typelib.c
View file @
a8ebda98
...
...
@@ -1522,7 +1522,6 @@ if(use_midl_tlb) {
}
static
void
test_CreateTypeLib
(
SYSKIND
sys
)
{
static
const
WCHAR
stdoleW
[]
=
{
's'
,
't'
,
'd'
,
'o'
,
'l'
,
'e'
,
'2'
,
'.'
,
't'
,
'l'
,
'b'
,
0
};
static
OLECHAR
typelibW
[]
=
{
't'
,
'y'
,
'p'
,
'e'
,
'l'
,
'i'
,
'b'
,
0
};
static
OLECHAR
helpfileW
[]
=
{
'C'
,
':'
,
'\\'
,
'b'
,
'o'
,
'g'
,
'u'
,
's'
,
'.'
,
'h'
,
'l'
,
'p'
,
0
};
static
OLECHAR
interface1W
[]
=
{
'i'
,
'n'
,
't'
,
'e'
,
'r'
,
'f'
,
'a'
,
'c'
,
'e'
,
'1'
,
0
};
...
...
@@ -1591,7 +1590,7 @@ static void test_CreateTypeLib(SYSKIND sys) {
trace
(
"CreateTypeLib tests
\n
"
);
hres
=
LoadTypeLib
(
stdoleW
,
&
stdole
);
hres
=
LoadTypeLib
(
wszStdOle2
,
&
stdole
);
ok
(
hres
==
S_OK
,
"got %08x
\n
"
,
hres
);
hres
=
ITypeLib_GetTypeInfoOfGuid
(
stdole
,
&
IID_IUnknown
,
&
unknown
);
...
...
@@ -5053,6 +5052,147 @@ static void test_GetLibAttr(void)
ITypeLib_Release
(
tl
);
}
HRESULT
WINAPI
uk_QueryInterface
(
IUnknown
*
obj
,
REFIID
iid
,
void
**
out
)
{
return
E_NOINTERFACE
;
}
ULONG
WINAPI
uk_AddRef
(
IUnknown
*
obj
)
{
return
2
;
}
ULONG
WINAPI
uk_Release
(
IUnknown
*
obj
)
{
return
1
;
}
IUnknownVtbl
vt
=
{
uk_QueryInterface
,
uk_AddRef
,
uk_Release
,
};
IUnknown
uk
=
{
&
vt
};
static
void
test_stub
(
void
)
{
HRESULT
hr
;
CLSID
clsid
;
IPSFactoryBuffer
*
factory
;
IRpcStubBuffer
*
base_stub
;
ITypeLib
*
stdole
;
ICreateTypeLib2
*
ctl
;
ICreateTypeInfo
*
cti
;
ITypeLib
*
tl
;
ITypeInfo
*
unk
,
*
ti
;
HREFTYPE
href
;
char
filenameA
[
MAX_PATH
];
WCHAR
filenameW
[
MAX_PATH
];
HKEY
hkey
;
LONG
lr
;
static
const
GUID
libguid
=
{
0x3b9ff02e
,
0x9675
,
0x4861
,{
0xb7
,
0x81
,
0xce
,
0xae
,
0xa4
,
0x78
,
0x2a
,
0xcc
}};
static
const
GUID
interfaceguid
=
{
0x3b9ff02f
,
0x9675
,
0x4861
,{
0xb7
,
0x81
,
0xce
,
0xae
,
0xa4
,
0x78
,
0x2a
,
0xcc
}};
static
const
GUID
coclassguid
=
{
0x3b9ff030
,
0x9675
,
0x4861
,{
0xb7
,
0x81
,
0xce
,
0xae
,
0xa4
,
0x78
,
0x2a
,
0xcc
}};
static
OLECHAR
interfaceW
[]
=
{
'i'
,
'n'
,
't'
,
'e'
,
'r'
,
'f'
,
'a'
,
'c'
,
'e'
,
0
};
static
OLECHAR
classW
[]
=
{
'c'
,
'l'
,
'a'
,
's'
,
's'
,
0
};
CoInitializeEx
(
NULL
,
COINIT_APARTMENTTHREADED
);
hr
=
LoadTypeLib
(
wszStdOle2
,
&
stdole
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ITypeLib_GetTypeInfoOfGuid
(
stdole
,
&
IID_IUnknown
,
&
unk
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
GetTempFileNameA
(
"."
,
"tlb"
,
0
,
filenameA
);
MultiByteToWideChar
(
CP_ACP
,
0
,
filenameA
,
-
1
,
filenameW
,
MAX_PATH
);
hr
=
CreateTypeLib2
(
SYS_WIN32
,
filenameW
,
&
ctl
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeLib2_SetGuid
(
ctl
,
&
libguid
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeLib2_SetLcid
(
ctl
,
LOCALE_NEUTRAL
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeLib2_CreateTypeInfo
(
ctl
,
interfaceW
,
TKIND_INTERFACE
,
&
cti
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_SetGuid
(
cti
,
&
interfaceguid
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_SetTypeFlags
(
cti
,
TYPEFLAG_FOLEAUTOMATION
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_AddRefTypeInfo
(
cti
,
unk
,
&
href
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_AddImplType
(
cti
,
0
,
href
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_QueryInterface
(
cti
,
&
IID_ITypeInfo
,
(
void
**
)
&
ti
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
ICreateTypeInfo_Release
(
cti
);
ITypeInfo_Release
(
unk
);
ITypeLib_Release
(
stdole
);
hr
=
ICreateTypeLib2_CreateTypeInfo
(
ctl
,
classW
,
TKIND_COCLASS
,
&
cti
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_SetGuid
(
cti
,
&
coclassguid
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_AddRefTypeInfo
(
cti
,
ti
,
&
href
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeInfo_AddImplType
(
cti
,
0
,
href
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
ITypeInfo_Release
(
ti
);
ICreateTypeInfo_Release
(
cti
);
hr
=
ICreateTypeLib2_SaveAllChanges
(
ctl
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
ICreateTypeLib2_QueryInterface
(
ctl
,
&
IID_ITypeLib
,
(
void
**
)
&
tl
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
hr
=
RegisterTypeLib
(
tl
,
filenameW
,
NULL
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
ITypeLib_Release
(
tl
);
ok
(
0
==
ICreateTypeLib2_Release
(
ctl
),
"Typelib still has references
\n
"
);
/* SYS_WIN32 typelibs should be registered only as 32-bit */
lr
=
RegOpenKeyExA
(
HKEY_CLASSES_ROOT
,
"TypeLib
\\
{3b9ff02e-9675-4861-b781-ceaea4782acc}
\\
0.0
\\
0
\\
win64"
,
0
,
KEY_READ
,
&
hkey
);
ok
(
lr
==
ERROR_FILE_NOT_FOUND
,
"got wrong return code: %u
\n
"
,
lr
);
lr
=
RegOpenKeyExA
(
HKEY_CLASSES_ROOT
,
"TypeLib
\\
{3b9ff02e-9675-4861-b781-ceaea4782acc}
\\
0.0
\\
0
\\
win32"
,
0
,
KEY_READ
,
&
hkey
);
ok
(
lr
==
ERROR_SUCCESS
,
"got wrong return code: %u
\n
"
,
lr
);
RegCloseKey
(
hkey
);
hr
=
CoGetPSClsid
(
&
interfaceguid
,
&
clsid
);
ok
(
hr
==
S_OK
,
"got: %x
\n
"
,
hr
);
hr
=
CoGetClassObject
(
&
clsid
,
CLSCTX_INPROC_SERVER
,
NULL
,
&
IID_IPSFactoryBuffer
,
(
void
**
)
&
factory
);
ok
(
hr
==
S_OK
,
"got: %x
\n
"
,
hr
);
hr
=
IPSFactoryBuffer_CreateStub
(
factory
,
&
interfaceguid
,
&
uk
,
&
base_stub
);
ok
(
hr
==
S_OK
,
"got: %x
\n
"
,
hr
);
IPSFactoryBuffer_Release
(
factory
);
UnRegisterTypeLib
(
&
libguid
,
0
,
0
,
0
,
SYS_WIN32
);
DeleteFileW
(
filenameW
);
CoUninitialize
();
}
START_TEST
(
typelib
)
{
const
char
*
filename
;
...
...
@@ -5091,4 +5231,5 @@ START_TEST(typelib)
test_TypeInfo2_GetContainingTypeLib
();
test_LoadRegTypeLib
();
test_GetLibAttr
();
test_stub
();
}
dlls/oleaut32/tmarshal.c
View file @
a8ebda98
...
...
@@ -303,8 +303,16 @@ _get_typeinfo_for_iid(REFIID riid, ITypeInfo**ti) {
sprintf
(
typelibkey
,
"Typelib
\\
%s
\\
%s
\\
0
\\
win%u"
,
tlguid
,
ver
,(
sizeof
(
void
*
)
==
8
)
?
64
:
32
);
tlfnlen
=
sizeof
(
tlfn
);
if
(
RegQueryValueA
(
HKEY_CLASSES_ROOT
,
typelibkey
,
tlfn
,
&
tlfnlen
))
{
ERR
(
"Could not get typelib fn?
\n
"
);
return
E_FAIL
;
#ifdef _WIN64
sprintf
(
typelibkey
,
"Typelib
\\
%s
\\
%s
\\
0
\\
win32"
,
tlguid
,
ver
);
tlfnlen
=
sizeof
(
tlfn
);
if
(
RegQueryValueA
(
HKEY_CLASSES_ROOT
,
typelibkey
,
tlfn
,
&
tlfnlen
))
{
#endif
ERR
(
"Could not get typelib fn?
\n
"
);
return
E_FAIL
;
#ifdef _WIN64
}
#endif
}
MultiByteToWideChar
(
CP_ACP
,
0
,
tlfn
,
-
1
,
tlfnW
,
sizeof
(
tlfnW
)
/
sizeof
(
tlfnW
[
0
]));
hres
=
LoadTypeLib
(
tlfnW
,
&
tl
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment