* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include <stdarg.h>
-
-#define COBJMACROS
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "ole2.h"
-
-#include "initguid.h"
-#include "vfw.h"
#include "avifile_private.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(avifile);
+#include <rpcproxy.h>
HMODULE AVIFILE_hModule = NULL;
typedef struct
{
/* IUnknown fields */
- const IClassFactoryVtbl *lpVtbl;
+ IClassFactory IClassFactory_iface;
DWORD dwRef;
CLSID clsid;
} IClassFactoryImpl;
+static inline IClassFactoryImpl *impl_from_IClassFactory(IClassFactory *iface)
+{
+ return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface);
+}
+
static HRESULT AVIFILE_CreateClassFactory(const CLSID *pclsid, const IID *riid,
LPVOID *ppv)
{
if (pClassFactory == NULL)
return E_OUTOFMEMORY;
- pClassFactory->lpVtbl = &iclassfact;
+ pClassFactory->IClassFactory_iface.lpVtbl = &iclassfact;
pClassFactory->dwRef = 0;
pClassFactory->clsid = *pclsid;
- hr = IClassFactory_QueryInterface((IClassFactory*)pClassFactory, riid, ppv);
+ hr = IClassFactory_QueryInterface(&pClassFactory->IClassFactory_iface, riid, ppv);
if (FAILED(hr)) {
HeapFree(GetProcessHeap(), 0, pClassFactory);
*ppv = NULL;
static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+ IClassFactoryImpl *This = impl_from_IClassFactory(iface);
TRACE("(%p)\n", iface);
static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+ IClassFactoryImpl *This = impl_from_IClassFactory(iface);
TRACE("(%p)\n", iface);
if ((--(This->dwRef)) > 0)
LPUNKNOWN pOuter,
REFIID riid,LPVOID *ppobj)
{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+ IClassFactoryImpl *This = impl_from_IClassFactory(iface);
TRACE("(%p,%p,%s,%p)\n", iface, pOuter, debugstr_guid(riid),
ppobj);
- if (ppobj == NULL || pOuter != NULL)
- return E_FAIL;
+ if (!ppobj)
+ return E_INVALIDARG;
*ppobj = NULL;
+ if (pOuter && !IsEqualGUID(&IID_IUnknown, riid))
+ return E_INVALIDARG;
+
if (IsEqualGUID(&CLSID_AVIFile, &This->clsid))
- return AVIFILE_CreateAVIFile(riid,ppobj);
+ return AVIFILE_CreateAVIFile(pOuter, riid, ppobj);
+ if (IsEqualGUID(&CLSID_WAVFile, &This->clsid))
+ return AVIFILE_CreateWAVFile(pOuter, riid, ppobj);
+
+ if (pOuter)
+ return CLASS_E_NOAGGREGATION;
+
if (IsEqualGUID(&CLSID_ICMStream, &This->clsid))
return AVIFILE_CreateICMStream(riid,ppobj);
- if (IsEqualGUID(&CLSID_WAVFile, &This->clsid))
- return AVIFILE_CreateWAVFile(riid,ppobj);
if (IsEqualGUID(&CLSID_ACMStream, &This->clsid))
return AVIFILE_CreateACMStream(riid,ppobj);
DisableThreadLibraryCalls(hInstDll);
AVIFILE_hModule = hInstDll;
break;
- case DLL_PROCESS_DETACH:
- break;
};
return TRUE;
}
+
+/***********************************************************************
+ * DllRegisterServer (AVIFIL32.@)
+ */
+HRESULT WINAPI DllRegisterServer(void)
+{
+ return __wine_register_resources( AVIFILE_hModule );
+}
+
+/***********************************************************************
+ * DllUnregisterServer (AVIFIL32.@)
+ */
+HRESULT WINAPI DllUnregisterServer(void)
+{
+ return __wine_unregister_resources( AVIFILE_hModule );
+}