From c040ef56602394c6f11e9f6d9d810ab4874af584 Mon Sep 17 00:00:00 2001 From: compn Date: Wed, 17 Oct 2007 05:14:21 +0000 Subject: Add Coinitialize function to vfw encoder and win32 loader. Fixes crash when trying to load vp7vfw.dll in vfw2menc. Patch by Gianluigi Tiesi mplayer___netfarm.it http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2007-September/054136.html git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24798 b3059339-0415-0410-9bf9-f77b7e298cf2 --- loader/win32.c | 30 +++++++++++++++++++++++++++++- loader/wine/objbase.h | 19 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 loader/wine/objbase.h (limited to 'loader') diff --git a/loader/win32.c b/loader/win32.c index 127f5bdf59..5bdeb789a6 100644 --- a/loader/win32.c +++ b/loader/win32.c @@ -38,6 +38,7 @@ for DLL to know too much about its environment. #include "wine/debugtools.h" #include "wine/module.h" #include "wine/winuser.h" +#include "wine/objbase.h" #include #include "win32.h" @@ -3816,6 +3817,12 @@ static int WINAPI expDuplicateHandle(HANDLE hSourceProcessHandle, // handle to return 1; } +static HRESULT WINAPI expCoInitializeEx(LPVOID lpReserved, DWORD dwCoInit) +{ + dbgprintf("CoInitializeEx(%p, %d) called\n", lpReserved, dwCoInit); + return S_OK; +} + // required by PIM1 codec (used by win98 PCTV Studio capture sw) static HRESULT WINAPI expCoInitialize( LPVOID lpReserved /* [in] pointer to win32 malloc interface @@ -3825,7 +3832,26 @@ static HRESULT WINAPI expCoInitialize( /* * Just delegate to the newer method. */ - return 0; //CoInitializeEx(lpReserved, COINIT_APARTMENTTHREADED); + return expCoInitializeEx(lpReserved, COINIT_APARTMENTTHREADED); +} + +static void WINAPI expCoUninitialize(void) +{ + dbgprintf("CoUninitialize() called\n"); +} + +/* allow static linking */ +HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit) +{ + return expCoInitializeEx(lpReserved, dwCoInit); +} +HRESULT WINAPI CoInitialize(LPVOID lpReserved) +{ + return expCoInitialize(lpReserved); +} +void WINAPI CoUninitialize(void) +{ + return expCoUninitialize(); } static DWORD WINAPI expSetThreadAffinityMask @@ -5132,6 +5158,8 @@ struct exports exp_ole32[]={ FF(CoCreateFreeThreadedMarshaler,-1) FF(CoCreateInstance, -1) FF(CoInitialize, -1) + FF(CoInitializeEx, -1) + FF(CoUninitialize, -1) FF(CoTaskMemAlloc, -1) FF(CoTaskMemFree, -1) FF(StringFromGUID2, -1) diff --git a/loader/wine/objbase.h b/loader/wine/objbase.h new file mode 100644 index 0000000000..df092c094d --- /dev/null +++ b/loader/wine/objbase.h @@ -0,0 +1,19 @@ +#ifndef WINE_OBJBASE_H +#define WINE_OBJBASE_H + +#ifndef STDCALL +#define STDCALL __attribute__((__stdcall__)) +#endif + +/* from objbase.h needed for ve_vfw.c */ +typedef enum tagCOINIT { + COINIT_APARTMENTTHREADED = 0x2, + COINIT_MULTITHREADED = 0x0, + COINIT_DISABLE_OLE1DDE = 0x4, + COINIT_SPEED_OVER_MEMORY = 0x8 +} COINIT; + +HRESULT STDCALL CoInitialize(LPVOID pvReserved); +HRESULT STDCALL CoInitializeEx(LPVOID pvReserved, DWORD dwCoinit); +void STDCALL CoUninitialize(void); +#endif -- cgit v1.2.3