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
6d53f071
Commit
6d53f071
authored
Jun 15, 2015
by
Nikolay Sivov
Committed by
Alexandre Julliard
Jun 15, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ole32: Marshal HICON as remotable handle.
parent
815197f2
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
47 additions
and
99 deletions
+47
-99
usrmarshal.c
dlls/ole32/tests/usrmarshal.c
+36
-0
usrmarshal.c
dlls/ole32/usrmarshal.c
+1
-99
objidl.idl
include/objidl.idl
+10
-0
No files found.
dlls/ole32/tests/usrmarshal.c
View file @
6d53f071
...
...
@@ -897,6 +897,41 @@ static void test_marshal_HDC(void)
ReleaseDC
(
0
,
hdc
);
}
static
void
test_marshal_HICON
(
void
)
{
static
const
BYTE
bmp_bits
[
1024
];
MIDL_STUB_MESSAGE
stub_msg
;
HICON
hIcon
,
hIcon2
;
USER_MARSHAL_CB
umcb
;
RPC_MESSAGE
rpc_msg
;
unsigned
char
*
buffer
;
wireHICON
wirehicon
;
ULONG
size
;
hIcon
=
CreateIcon
(
0
,
16
,
16
,
1
,
1
,
bmp_bits
,
bmp_bits
);
ok
(
hIcon
!=
0
,
"CreateIcon failed
\n
"
);
init_user_marshal_cb
(
&
umcb
,
&
stub_msg
,
&
rpc_msg
,
NULL
,
0
,
MSHCTX_LOCAL
);
size
=
HICON_UserSize
(
&
umcb
.
Flags
,
0
,
&
hIcon
);
ok
(
size
==
sizeof
(
*
wirehicon
),
"Wrong size %d
\n
"
,
size
);
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
init_user_marshal_cb
(
&
umcb
,
&
stub_msg
,
&
rpc_msg
,
buffer
,
size
,
MSHCTX_LOCAL
);
HICON_UserMarshal
(
&
umcb
.
Flags
,
buffer
,
&
hIcon
);
wirehicon
=
(
wireHICON
)
buffer
;
ok
(
wirehicon
->
fContext
==
WDT_INPROC_CALL
,
"Context should be WDT_INPROC_CALL instead of 0x%08x
\n
"
,
wirehicon
->
fContext
);
ok
(
wirehicon
->
u
.
hInproc
==
(
LONG_PTR
)
hIcon
,
"Marshaled value should be %p instead of %x
\n
"
,
hIcon
,
wirehicon
->
u
.
hRemote
);
init_user_marshal_cb
(
&
umcb
,
&
stub_msg
,
&
rpc_msg
,
buffer
,
size
,
MSHCTX_LOCAL
);
HICON_UserUnmarshal
(
&
umcb
.
Flags
,
buffer
,
&
hIcon2
);
ok
(
hIcon
==
hIcon2
,
"Didn't unmarshal properly
\n
"
);
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
init_user_marshal_cb
(
&
umcb
,
&
stub_msg
,
&
rpc_msg
,
NULL
,
0
,
MSHCTX_LOCAL
);
HICON_UserFree
(
&
umcb
.
Flags
,
&
hIcon2
);
DestroyIcon
(
hIcon
);
}
START_TEST
(
usrmarshal
)
{
CoInitialize
(
NULL
);
...
...
@@ -911,6 +946,7 @@ START_TEST(usrmarshal)
test_marshal_STGMEDIUM
();
test_marshal_SNB
();
test_marshal_HDC
();
test_marshal_HICON
();
CoUninitialize
();
}
dlls/ole32/usrmarshal.c
View file @
6d53f071
...
...
@@ -342,6 +342,7 @@ IMPL_WIREM_HANDLE(HACCEL)
IMPL_WIREM_HANDLE
(
HMENU
)
IMPL_WIREM_HANDLE
(
HWND
)
IMPL_WIREM_HANDLE
(
HDC
)
IMPL_WIREM_HANDLE
(
HICON
)
/******************************************************************************
* HGLOBAL_UserSize [OLE32.@]
...
...
@@ -662,105 +663,6 @@ void __RPC_USER HBITMAP_UserFree(ULONG *pFlags, HBITMAP *phBmp)
}
/******************************************************************************
* HICON_UserSize [OLE32.@]
*
* Calculates the buffer size required to marshal an icon.
*
* PARAMS
* pFlags [I] Flags. See notes.
* StartingSize [I] Starting size of the buffer. This value is added on to
* the buffer size required for the icon.
* phIcon [I] Icon to size.
*
* RETURNS
* The buffer size required to marshal an icon plus the starting size.
*
* NOTES
* Even though the function is documented to take a pointer to a ULONG in
* pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of which
* the first parameter is a ULONG.
* This function is only intended to be called by the RPC runtime.
*/
ULONG
__RPC_USER
HICON_UserSize
(
ULONG
*
pFlags
,
ULONG
StartingSize
,
HICON
*
phIcon
)
{
FIXME
(
":stub
\n
"
);
return
StartingSize
;
}
/******************************************************************************
* HICON_UserMarshal [OLE32.@]
*
* Marshals an icon into a buffer.
*
* PARAMS
* pFlags [I] Flags. See notes.
* pBuffer [I] Buffer to marshal the icon into.
* phIcon [I] Icon to marshal.
*
* RETURNS
* The end of the marshaled data in the buffer.
*
* NOTES
* Even though the function is documented to take a pointer to a ULONG in
* pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of which
* the first parameter is a ULONG.
* This function is only intended to be called by the RPC runtime.
*/
unsigned
char
*
__RPC_USER
HICON_UserMarshal
(
ULONG
*
pFlags
,
unsigned
char
*
pBuffer
,
HICON
*
phIcon
)
{
FIXME
(
":stub
\n
"
);
return
pBuffer
;
}
/******************************************************************************
* HICON_UserUnmarshal [OLE32.@]
*
* Unmarshals an icon from a buffer.
*
* PARAMS
* pFlags [I] Flags. See notes.
* pBuffer [I] Buffer to marshal the icon from.
* phIcon [O] Address that receive the unmarshaled icon.
*
* RETURNS
* The end of the marshaled data in the buffer.
*
* NOTES
* Even though the function is documented to take a pointer to an ULONG in
* pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of which
* the first parameter is an ULONG.
* This function is only intended to be called by the RPC runtime.
*/
unsigned
char
*
__RPC_USER
HICON_UserUnmarshal
(
ULONG
*
pFlags
,
unsigned
char
*
pBuffer
,
HICON
*
phIcon
)
{
FIXME
(
":stub
\n
"
);
return
pBuffer
;
}
/******************************************************************************
* HICON_UserFree [OLE32.@]
*
* Frees an unmarshaled icon.
*
* PARAMS
* pFlags [I] Flags. See notes.
* phIcon [I] Icon to free.
*
* RETURNS
* The end of the marshaled data in the buffer.
*
* NOTES
* Even though the function is documented to take a pointer to a ULONG in
* pFlags, it actually takes a pointer to a USER_MARSHAL_CB structure, of
* which the first parameter is a ULONG.
* This function is only intended to be called by the RPC runtime.
*/
void
__RPC_USER
HICON_UserFree
(
ULONG
*
pFlags
,
HICON
*
phIcon
)
{
FIXME
(
":stub
\n
"
);
}
/******************************************************************************
* HPALETTE_UserSize [OLE32.@]
*
* Calculates the buffer size required to marshal a palette.
...
...
include/objidl.idl
View file @
6d53f071
...
...
@@ -2441,6 +2441,16 @@ interface IGlobalOptions : IUnknown
HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value);
}
[
object,
pointer_default(unique),
uuid(947990de-cc28-11d2-a0f7-00805f858fb1)
]
interface IDummyHICONIncluder : IUnknown
{
HRESULT Dummy([in] HICON hIcon, [in] HDC hdc);
}
cpp_quote("#ifdef USE_COM_CONTEXT_DEF")
typedef DWORD CPFLAGS;
...
...
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