ole32: Marshal HICON as remotable handle.
This commit is contained in:
parent
815197f28c
commit
6d53f071c6
|
@ -897,6 +897,41 @@ static void test_marshal_HDC(void)
|
||||||
ReleaseDC(0, hdc);
|
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)
|
START_TEST(usrmarshal)
|
||||||
{
|
{
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
|
@ -911,6 +946,7 @@ START_TEST(usrmarshal)
|
||||||
test_marshal_STGMEDIUM();
|
test_marshal_STGMEDIUM();
|
||||||
test_marshal_SNB();
|
test_marshal_SNB();
|
||||||
test_marshal_HDC();
|
test_marshal_HDC();
|
||||||
|
test_marshal_HICON();
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
|
@ -342,6 +342,7 @@ IMPL_WIREM_HANDLE(HACCEL)
|
||||||
IMPL_WIREM_HANDLE(HMENU)
|
IMPL_WIREM_HANDLE(HMENU)
|
||||||
IMPL_WIREM_HANDLE(HWND)
|
IMPL_WIREM_HANDLE(HWND)
|
||||||
IMPL_WIREM_HANDLE(HDC)
|
IMPL_WIREM_HANDLE(HDC)
|
||||||
|
IMPL_WIREM_HANDLE(HICON)
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* HGLOBAL_UserSize [OLE32.@]
|
* HGLOBAL_UserSize [OLE32.@]
|
||||||
|
@ -661,105 +662,6 @@ void __RPC_USER HBITMAP_UserFree(ULONG *pFlags, HBITMAP *phBmp)
|
||||||
FIXME(":stub\n");
|
FIXME(":stub\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* 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.@]
|
* HPALETTE_UserSize [OLE32.@]
|
||||||
*
|
*
|
||||||
|
|
|
@ -2441,6 +2441,16 @@ interface IGlobalOptions : IUnknown
|
||||||
HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value);
|
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")
|
cpp_quote("#ifdef USE_COM_CONTEXT_DEF")
|
||||||
|
|
||||||
typedef DWORD CPFLAGS;
|
typedef DWORD CPFLAGS;
|
||||||
|
|
Loading…
Reference in New Issue