Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
99f48907
Commit
99f48907
authored
Jul 25, 2002
by
Marcus Meissner
Committed by
Alexandre Julliard
Jul 25, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Factored out the OLE 16 bit allocator from StringFromCLSID.
Implemented ProgIDFromCLSID16.
parent
9b9d85fe
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
94 additions
and
30 deletions
+94
-30
compobj.c
dlls/ole32/compobj.c
+93
-29
compobj.spec
dlls/ole32/compobj.spec
+1
-1
No files found.
dlls/ole32/compobj.c
View file @
99f48907
...
...
@@ -587,46 +587,65 @@ HRESULT WINE_StringFromCLSID(
return
S_OK
;
}
extern
BOOL
WINAPI
K32WOWCallback16Ex
(
DWORD
vpfn16
,
DWORD
dwFlags
,
DWORD
cbArgs
,
LPVOID
pArgs
,
LPDWORD
pdwRetCode
);
/******************************************************************************
* _xmalloc16 [internal]
* Allocates size bytes from the standard ole16 allocator.
*
* RETURNS
* the allocated segmented pointer and a HRESULT
*/
HRESULT
_xmalloc16
(
DWORD
size
,
SEGPTR
*
ptr
)
{
LPMALLOC16
mllc
;
DWORD
args
[
2
];
if
(
CoGetMalloc16
(
0
,
&
mllc
))
return
E_OUTOFMEMORY
;
args
[
0
]
=
(
DWORD
)
mllc
;
args
[
1
]
=
size
;
/* No need for a Callback entry, we have WOWCallback16Ex which does
* everything we need.
*/
if
(
!
K32WOWCallback16Ex
(
(
DWORD
)((
ICOM_VTABLE
(
IMalloc16
)
*
)
MapSL
(
(
SEGPTR
)
ICOM_VTBL
(((
LPMALLOC16
)
MapSL
((
SEGPTR
)
mllc
))))
)
->
Alloc
,
WCB16_CDECL
,
2
*
sizeof
(
DWORD
),
(
LPVOID
)
args
,
(
LPDWORD
)
ptr
))
{
ERR
(
"CallTo16 IMalloc16 (%ld) failed
\n
"
,
size
);
return
E_FAIL
;
}
return
S_OK
;
}
/******************************************************************************
* StringFromCLSID [COMPOBJ.19]
* Converts a GUID into the respective string representation.
* The target string is allocated using the OLE IMalloc.
*
* RETURNS
* the string representation and HRESULT
*/
HRESULT
WINAPI
StringFromCLSID16
(
REFCLSID
id
,
/* [in] the GUID to be converted */
LPOLESTR16
*
idstr
/* [out] a pointer to a to-be-allocated segmented pointer pointing to the resulting string */
REFCLSID
id
,
/* [in] the GUID to be converted */
LPOLESTR16
*
idstr
/* [out] a pointer to a to-be-allocated segmented pointer pointing to the resulting string */
)
{
extern
BOOL
WINAPI
K32WOWCallback16Ex
(
DWORD
vpfn16
,
DWORD
dwFlags
,
DWORD
cbArgs
,
LPVOID
pArgs
,
LPDWORD
pdwRetCode
);
LPMALLOC16
mllc
;
HRESULT
ret
;
DWORD
args
[
2
];
ret
=
CoGetMalloc16
(
0
,
&
mllc
);
if
(
ret
)
return
ret
;
HRESULT
ret
;
args
[
0
]
=
(
DWORD
)
mllc
;
args
[
1
]
=
40
;
/* No need for a Callback entry, we have WOWCallback16Ex which does
* everything we need.
*/
if
(
!
K32WOWCallback16Ex
(
(
DWORD
)((
ICOM_VTABLE
(
IMalloc16
)
*
)
MapSL
(
(
SEGPTR
)
ICOM_VTBL
(((
LPMALLOC16
)
MapSL
((
SEGPTR
)
mllc
))))
)
->
Alloc
,
WCB16_CDECL
,
2
*
sizeof
(
DWORD
),
(
LPVOID
)
args
,
(
LPDWORD
)
idstr
))
{
WARN
(
"CallTo16 IMalloc16 failed
\n
"
);
return
E_FAIL
;
}
return
WINE_StringFromCLSID
(
id
,
MapSL
((
SEGPTR
)
*
idstr
));
ret
=
_xmalloc16
(
40
,(
SEGPTR
*
)
idstr
);
if
(
ret
!=
S_OK
)
return
ret
;
return
WINE_StringFromCLSID
(
id
,
MapSL
((
SEGPTR
)
*
idstr
));
}
/******************************************************************************
...
...
@@ -731,6 +750,51 @@ HRESULT WINAPI ProgIDFromCLSID(
}
/******************************************************************************
* ProgIDFromCLSID [COMPOBJ.62]
* Converts a class id into the respective Program ID. (By using a registry lookup)
* RETURNS S_OK on success
* riid associated with the progid
*/
HRESULT
WINAPI
ProgIDFromCLSID16
(
REFCLSID
clsid
,
/* [in] class id as found in registry */
LPOLESTR16
*
lplpszProgID
/* [out] associated Prog ID */
)
{
char
strCLSID
[
50
],
*
buf
,
*
buf2
;
DWORD
buf2len
;
HKEY
xhkey
;
HRESULT
ret
=
S_OK
;
WINE_StringFromCLSID
(
clsid
,
strCLSID
);
buf
=
HeapAlloc
(
GetProcessHeap
(),
0
,
strlen
(
strCLSID
)
+
14
);
sprintf
(
buf
,
"CLSID
\\
%s
\\
ProgID"
,
strCLSID
);
if
(
RegOpenKeyA
(
HKEY_CLASSES_ROOT
,
buf
,
&
xhkey
))
ret
=
REGDB_E_CLASSNOTREG
;
HeapFree
(
GetProcessHeap
(),
0
,
buf
);
if
(
ret
==
S_OK
)
{
buf2
=
HeapAlloc
(
GetProcessHeap
(),
0
,
255
);
buf2len
=
255
;
if
(
RegQueryValueA
(
xhkey
,
NULL
,
buf2
,
&
buf2len
))
ret
=
REGDB_E_CLASSNOTREG
;
if
(
ret
==
S_OK
)
{
ret
=
_xmalloc16
(
buf2len
+
1
,
(
SEGPTR
*
)
lplpszProgID
);
if
(
ret
!=
S_OK
)
return
ret
;
strcpy
(
MapSL
((
SEGPTR
)
*
lplpszProgID
),
buf2
);
ret
=
S_OK
;
}
HeapFree
(
GetProcessHeap
(),
0
,
buf2
);
}
RegCloseKey
(
xhkey
);
return
ret
;
}
/******************************************************************************
* CLSIDFromProgID [COMPOBJ.61]
* Converts a program id into the respective GUID. (By using a registry lookup)
* RETURNS
...
...
dlls/ole32/compobj.spec
View file @
99f48907
...
...
@@ -59,7 +59,7 @@
59 stub _IID_IDFRESERVED3
60 stub _IID_IMESSAGEFILTER
61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID16
62
stub PROGIDFROMCLSID
62
pascal ProgIDFromCLSID(ptr ptr) ProgIDFromCLSID16
63 pascal CoLockObjectExternal(segptr word word) CoLockObjectExternal16
64 stub _CLSID_STDMARSHAL
65 stub COGETTREATASCLASS
...
...
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