* Sync up to trunk head (r64829).
[reactos.git] / dll / win32 / avifil32 / factory.c
index 295f11f..d0eb1ef 100644 (file)
  * 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 "rpcproxy.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;
 
@@ -140,16 +124,23 @@ static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY 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);
 
@@ -216,8 +207,6 @@ BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
     DisableThreadLibraryCalls(hInstDll);
     AVIFILE_hModule = hInstDll;
     break;
-  case DLL_PROCESS_DETACH:
-    break;
   };
 
   return TRUE;