コード例 #1
0
IDebugApplication *get_debug_application()
{
    HRESULT hr = S_OK;
    IClassFactory *classFactory = nullptr;
    IProcessDebugManager *pdm = nullptr;
    IDebugApplication *debugApplication = nullptr;

    IfComFailError(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED));
    IfComFailError(CoGetClassObject(__uuidof(ProcessDebugManager), CLSCTX_INPROC_SERVER, NULL, __uuidof(IClassFactory), (LPVOID *) &classFactory));
    IfComFailError(classFactory->CreateInstance(0, _uuidof(IProcessDebugManager), (LPVOID *) &pdm));
    Assert::IsTrue(SUCCEEDED(pdm->GetDefaultApplication(&debugApplication)));

error:
    if (pdm)
    {
        pdm->Release();
    }

    if (classFactory)
    {
        classFactory->Release();
    }

    return debugApplication;
}
コード例 #2
0
ファイル: CommFuns.cpp プロジェクト: dreamsxin/PcManager
HRESULT MyCoCreateInstance(LPCTSTR lpDll, const CLSID& rclsid, const IID& riid, void** ppv)
{
	HRESULT hr = E_FAIL;

	HMODULE hDll = LoadLibrary(lpDll);
	if ( hDll != NULL )
	{
		HRESULT (WINAPI *pfnDllGetClassObject)(const CLSID& rclsid, const IID& riid, void** ppv);

		(FARPROC&)pfnDllGetClassObject = GetProcAddress(hDll, "DllGetClassObject");
		if ( pfnDllGetClassObject != NULL )
		{
			IClassFactory* lpClassFactory = NULL;

			hr = pfnDllGetClassObject(rclsid, IID_IClassFactory, (PVOID*)&lpClassFactory);
			if ( SUCCEEDED(hr) && lpClassFactory != NULL )
			{
				hr = lpClassFactory->CreateInstance(NULL, riid, ppv);

				lpClassFactory->Release();
				lpClassFactory = NULL;
			}
		}
	}

	return hr;
}
コード例 #3
0
ファイル: ExConverter.cpp プロジェクト: sdottaka/winmerge-v2
	bool initialize()
	{
		DllGetClassObjectFunc pfnDllGetClassObject = nullptr;
		IClassFactory *pClassFactory = nullptr;

		m_hLibMLang = LoadLibrary(_T("mlang.dll"));
		if (m_hLibMLang != nullptr)
		{
			pfnDllGetClassObject = (DllGetClassObjectFunc)GetProcAddress(m_hLibMLang, "DllGetClassObject");
			if (pfnDllGetClassObject != nullptr)
			{
				HRESULT hr = pfnDllGetClassObject(CLSID_CMultiLanguage, IID_IClassFactory, (void**)&pClassFactory);
				if (pClassFactory != nullptr)
				{
					hr = pClassFactory->CreateInstance(nullptr, IID_IMultiLanguage2, (void**)&m_pmlang);
					if (SUCCEEDED(hr))
					{
						pClassFactory->Release();
						return true;
					}
				}
			}
		}
		if (pClassFactory != nullptr)
			pClassFactory->Release();
		if (m_hLibMLang != nullptr)
		{
			FreeLibrary(m_hLibMLang);
			m_hLibMLang = nullptr;
		}
		return false;
	}
コード例 #4
0
int main()
{
	TRACE("Starting COM-Client-Application\n");

	IUnknown* pUnk;
	IMotion* pMot;
	IVisual* pVis;
	IClassFactory* pClf;

	GetClassObject(CLSID_CSpaceship, IID_IClassFactory, (void**) &pClf);

	pClf->CreateInstance(IID_IUnknown, (void**) &pUnk);
	pUnk->QueryInterface(IID_IMotion, (void**) &pMot);
	pMot->QueryInterface(IID_IVisual, (void**) &pVis);
	TRACE("pUnk: %p, pMot: %p, pVis: %p\n", pUnk, pMot, pVis);

	pMot->Fly();
	int nPos = pMot->GetPosition();
	TRACE("nPos: %d\n", nPos);
	pVis->Display();

	pClf->Release();
	pUnk->Release();
	pMot->Release();
	pVis->Release();

	return 0;
}
コード例 #5
0
ファイル: cocreate.cpp プロジェクト: Sathyaish/Practice
HRESULT PALAPI PAL_CoCreateInstance(REFCLSID   rclsid,
                             REFIID     riid,
                             void     **ppv)
{
    for (size_t i = 0; i < sizeof(g_CoClasses) / sizeof(g_CoClasses[0]); i++)
    {
        const CoClass *pCoClass = &g_CoClasses[i];

        if (*pCoClass->pClsid == rclsid)
        {
            HRESULT             hr;
            HINSTANCE           dll;
            DLLGETCLASSOBJECT   *dllGetClassObject;
            IClassFactory       *classFactory;
            WCHAR FullPath[_MAX_PATH];

            if (!PAL_GetPALDirectoryW(FullPath, _MAX_PATH)) {
                goto Win32Error;
            }
            if (wcslen(FullPath) + wcslen(pCoClass->dllName) >= _MAX_PATH) {
                SetLastError(ERROR_FILENAME_EXCED_RANGE);
                goto Win32Error;
            }
            wcsncat(FullPath, pCoClass->dllName, _MAX_PATH);
            
            dll = LoadLibraryW(FullPath);
            if (dll == NULL)
                goto Win32Error;

            dllGetClassObject = (DLLGETCLASSOBJECT*)GetProcAddress(dll, "DllGetClassObject");
            if (dllGetClassObject == NULL) {
                // The CLR shim exports a DllGetClassObject which in turn decides which DLL to load and
                // call DllGetClassObjectInternal on.  Without the shim, the PALRT must do the same
                // here.
                dllGetClassObject = (DLLGETCLASSOBJECT*)GetProcAddress(dll, "DllGetClassObjectInternal");
                if (dllGetClassObject == NULL) {
                    goto Win32Error;
                }
            }

            hr = (*dllGetClassObject)(rclsid, IID_IClassFactory, (void**)&classFactory);
            if (FAILED(hr))
                return hr;

            hr = classFactory->CreateInstance(NULL, riid, ppv);
            classFactory->Release();
            return hr;
        }
    }

    _ASSERTE(!"Unknown CLSID in PAL_CoCreateInstance");
    return CLASS_E_CLASSNOTAVAILABLE;

Win32Error:
    DWORD dwError = GetLastError();
    return HRESULT_FROM_WIN32(dwError);
}
コード例 #6
0
ファイル: nekoFlash.cpp プロジェクト: ZHANITEST/nekonovel
nekoFlashInstance::nekoFlashInstance(nekoIBlock *block)
    : nekoIBlockInstance(block)
    , mFlashType(FLASH_MOVIE)
    , mCurView(NULL)
    , mSkipAbleTime(0)
    , mOleObject(0)
    , mFlashSite(0)
    , flashInterface(0)
{
    HMODULE flashLib = GetNekoNovel()->GetFlashLib();

    mFlashSite = nekoNew nekoFlashSite;
    mFlashSite->Init(this);

    if(flashLib)
    {
        IClassFactory* factory = 0;
        GetClassObject getClassFunc = (GetClassObject)GetProcAddress(flashLib, "DllGetClassObject");
        HRESULT result = getClassFunc(ShockwaveFlashObjects::CLSID_ShockwaveFlash, IID_IClassFactory, (void**)&factory);
        if(SUCCEEDED(result))
        {
            factory->CreateInstance(NULL, IID_IOleObject, (void**)&mOleObject);
            factory->Release();
        }
    }

    // If we still don't have the object, try loading from registry
    if(!mOleObject)
    {
        HRESULT result = CoCreateInstance(ShockwaveFlashObjects::CLSID_ShockwaveFlash, 0, CLSCTX_INPROC_SERVER, IID_IOleObject, (void**)&mOleObject);
        if(FAILED(result))
        {
            LogPrint(LOG_LEVEL_WARN, "플래시 컨트롤을 불러올 수 없습니다.\nFlash.ocx가 설치되어 있지 않을 수 있습니다.");
            return;
        }
    }


    IOleClientSite* clientSite = 0;
    mFlashSite->QueryInterface(__uuidof(IOleClientSite), (void**)&clientSite);
    mOleObject->SetClientSite(clientSite);

    clientSite->Release();

    mOleObject->QueryInterface(__uuidof(ShockwaveFlashObjects::IShockwaveFlash), (LPVOID*)&flashInterface);
    flashInterface->PutWMode("opaque");

    mOleObject->DoVerb(OLEIVERB_SHOW, 0, clientSite, 0, 0, 0);
    clientSite->Release();

    //mOleObject->QueryInterface(__uuidof(IOleInPlaceObjectWindowless), (LPVOID*)windowlessObject.Pptr());

    flashInterface->QueryInterface(IID_IViewObject, (void**)&mCurView);

    mBufferUsingCount++;
}
コード例 #7
0
STDAPI DllGetClassObject( REFCLSID clsid, REFIID riid, void** ppv )
{
	IClassFactory* pFactory = NULL;

	if (CLSID_MackieControlXT == clsid)
	{
//		TRACE("DllGetClassObject: CMackieControlXTFactory\n");
		pFactory = new CMackieControlXTFactory;				// No AddRef in constructor
	}
	else if (CLSID_MackieControlXTPropPage == clsid)
	{
//		TRACE("DllGetClassObject: CMackieControlXTPropPageFactory\n");
		pFactory = new CMackieControlXTPropPageFactory;		// No AddRef in constructor
	}
	else if (CLSID_MackieControlMaster == clsid)
	{
//		TRACE("DllGetClassObject: CMackieControlMasterFactory\n");
		pFactory = new CMackieControlMasterFactory;			// No AddRef in constructor
	}
	else if (CLSID_MackieControlMasterPropPage == clsid)
	{
//		TRACE("DllGetClassObject: CMackieControlMasterPropPageFactory\n");
		pFactory = new CMackieControlMasterPropPageFactory;  // No AddRef in constructor
	}
	else if (CLSID_MackieControlC4 == clsid)
	{
//		TRACE("DllGetClassObject: CMackieControlC4Factory\n");
		pFactory = new CMackieControlC4Factory;				// No AddRef in constructor
	}
	else if (CLSID_MackieControlC4PropPage == clsid)
	{
//		TRACE("DllGetClassObject: CMackieControlC4PropPageFactory\n");
		pFactory = new CMackieControlC4PropPageFactory;		// No AddRef in constructor
	}
	else
	{
//		TRACE("DllGetClassObject: CLASS_E_CLASSNOTAVAILABLE\n");
		return CLASS_E_CLASSNOTAVAILABLE;
	}

	if (!pFactory)
	{
//		TRACE("DllGetClassObject: E_OUTOFMEMORY");
		return E_OUTOFMEMORY;
	}

	// Get requested interface.
	HRESULT const hr = pFactory->QueryInterface( riid, ppv );
	pFactory->Release();
	return hr;
}
コード例 #8
0
ファイル: Registry.cpp プロジェクト: sillsdev/libcom
/**
 * @brief Get a class factory able to create objects of class ID requestedClassID.
 *
 * NOTE: This function does NOT do what the MSDN spec actually says it does. Fix this is if that's important.
 * Note: The caller is responsible for releasing the class factory.
 * Note: This implementation is intended for use for inprocess COM only.
 * http://msdn2.microsoft.com/en-us/library/ms684007.aspx
 * @param requestedClassID class ID for which you want a class factory
 * @param dwClsContext should be CLSCTX_INPROC
 * @param factoryInterface receives the desired class factory, of type IClassFactory
 * @return S_OK upon success, CO_E_NOT_SUPPORTED upon being given an unsupported context, or REGDB_E_CLASSNOTREG upon a bunch of means of failure
 * @return E_OUTOFMEMORY upon running out of memory while creating the class factory
 * @return E_NOINTERFACE if the class does not support the requested interface
 * @return CLASS_E_CLASSNOTAVAILABLE if the DLL does not support the requested class id, though the dll map file claimed it did
 * @return REGDB_E_CLASSNOTREG if there was an error calling DllGetClassObject and we never registered the factory
 */
DLLEXPORT
HRESULT CoGetClassObject(REFCLSID requestedClassID, DWORD dwClsContext, LPVOID,
	REFIID /*requestedInterfaceID*/, LPVOID* factoryInterface)
{
	if (dwClsContext != CLSCTX_INPROC) {
		return CO_E_NOT_SUPPORTED;
	}

	IClassFactory* factory = NULL;
	HRESULT	hr = ComRegistry::getInstance()->getFactoryPointer(requestedClassID, &factory);
	if (SUCCEEDED(hr))
	  factory->AddRef();

	*factoryInterface = factory;
	return hr;
}
コード例 #9
0
ファイル: Main.cpp プロジェクト: AhFu/WPF-Samples
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
{
    HRESULT result = E_INVALIDARG; 

    if (NULL != ppv)
    {
        IClassFactory *classFactory = NULL;
        if (CLSID_YCbCrPixelFormatConverter == rclsid)
        {
            result = S_OK;
            classFactory = new TestClassFactory<YCbCrPixelFormatConverter>();
        }
        else if (CLSID_CmykPixelFormatConverter == rclsid)
        {
            result = S_OK;
            classFactory = new TestClassFactory<CmykPixelFormatConverter>();
        }
        else if (CLSID_AitDecoder == rclsid)
        {
            result = S_OK;
            classFactory = new TestClassFactory<AitDecoder>();
        }
        else if (CLSID_AitEncoder == rclsid)
        {
            result = S_OK;
            classFactory = new TestClassFactory<AitEncoder>();
        }        
        else
        {
            result = E_NOINTERFACE;
        }

        if (SUCCEEDED(result))
        {
            if (NULL != classFactory)
            {
                result = classFactory->QueryInterface(riid, ppv);
            }
            else
            {
                result = E_OUTOFMEMORY;
            }
        }
    }
    return result;    
}
コード例 #10
0
ファイル: Registry.cpp プロジェクト: sillsdev/libcom
extern "C" HRESULT CoCreateInstance(REFCLSID requestedClassID,
	LPUNKNOWN outerAggregateIUnknown, DWORD /*dwClsContext*/,
	REFIID objectInterfaceID, LPVOID* objectInterface)
{
	*objectInterface = NULL;

	IClassFactory* pIFactory = NULL;
	HRESULT hr = CoGetClassObject(requestedClassID, static_cast<unsigned long>(CLSCTX_INPROC),
		(void *)0, IID_IClassFactory, (void **)&pIFactory);
	if (SUCCEEDED(hr))
	{
		// Create the component
		hr = pIFactory->CreateInstance(outerAggregateIUnknown, objectInterfaceID, objectInterface);
		// Release the class factory
		pIFactory->Release();
	}

	return hr;
}
コード例 #11
0
 static HRESULT CreateInstance(REFCLSID clsid, const CLASS_OBJECT_INIT *pClassObjectInits, size_t cClassObjectInits, REFIID riid, void **ppv)
 {
     *ppv = NULL;
     HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
     for (size_t i = 0; i < cClassObjectInits; i++)
     {
         if (clsid == *pClassObjectInits[i].pClsid)
         {
             IClassFactory *pClassFactory = new (std::nothrow) CClassFactory(pClassObjectInits[i].pfnCreate);
             hr = pClassFactory ? S_OK : E_OUTOFMEMORY;
             if (SUCCEEDED(hr))
             {
                 hr = pClassFactory->QueryInterface(riid, ppv);
                 pClassFactory->Release();
             }
             break; // match found
         }
     }
     return hr;
 }
コード例 #12
0
ファイル: MiniPlayer.cpp プロジェクト: jslhs/_dump
HRESULT MiniPlayer::CoCreateInstanceAx(LPCTSTR ax, REFCLSID rclsid, IUnknown *punkOuter, REFIID riid, LPVOID *ppv)
{
	HINSTANCE hInst = _loadedLibs[ax];
	if(hInst == NULL)
		hInst = CoLoadLibrary(const_cast<LPOLESTR>(ax), 0);
	if(!hInst) return -1;
	_loadedLibs[ax] = hInst;
	LPFNGETCLASSOBJECT pfnDllGetObjectClass = reinterpret_cast<LPFNGETCLASSOBJECT>(GetProcAddress(hInst, "DllGetClassObject"));
	if(!pfnDllGetObjectClass) return -1;

	IClassFactory *pClsFactory = NULL;
	HRESULT hr = pfnDllGetObjectClass(rclsid, IID_IClassFactory, (void **)&pClsFactory);
	IF_CHK(hr, "Unable to get Class Factory.");

	return pClsFactory->CreateInstance(punkOuter, riid, ppv);

Cleanup:
	if(hInst) CoFreeLibrary(hInst);
	return hr;
}
コード例 #13
0
ファイル: dsnative.cpp プロジェクト: sherpya/dsnative
    BOOL CreateFilter(void)
    {
        LPFNGETCLASSOBJECT pDllGetClassObject = (LPFNGETCLASSOBJECT) GetProcAddress(m_hDll, "DllGetClassObject");
        if (!pDllGetClassObject) return FALSE;

        IClassFactory *factory;
        m_res = pDllGetClassObject(m_guid, IID_IClassFactory, (LPVOID *) &factory);
        if (m_res != S_OK) return FALSE;

        IUnknown* object;
        m_res = factory->CreateInstance(NULL, IID_IUnknown, (LPVOID *) &object);
        factory->Release();

        if (m_res != S_OK) return FALSE;

        m_res = object->QueryInterface(IID_IBaseFilter, (LPVOID *) &m_pFilter);
        object->Release();

        return (m_res == S_OK);
    }
コード例 #14
0
ファイル: createinstance.cpp プロジェクト: boatgm/urchin
/***********************************************************************
*           FX_CoCreateInstance [COMPOBJ.13]
*           FX_CoCreateInstance [OLE32.@]
*/
firtex::com::FX_HRESULT FX_STDAPICALLTYPE firtex::com::FX_CoCreateInstance(
	firtex::com::FX_REFCLSID rclsid,
	firtex::com::IUnknown* pUnkOuter,
	uint32_t dwClsContext,
	firtex::com::FX_REFIID iid,
	void** ppv)
{
	IClassFactory* lpclf = 0;

	// check parameters
	if (ppv==0) return FX_E_POINTER;

	// Initialize the "out" parameter
	*ppv = 0;

	/*
	* The Standard Global Interface Table (GIT) object is a process-wide singleton.
	* Rather than create a class factory, we can just check for it here
	*/
	if (FX_IsEqualCLSID(rclsid, git::clsid)) 
	{
		return git::QueryInterface( iid, ppv );
	}

	// Get a class factory to construct the object we want.
	FX_HRESULT hr = FX_CoGetClassObject(rclsid, dwClsContext, NULL,
		IClassFactory::iid, (void**)&lpclf);
	if ( FX_FAILED(hr) ) {
		//FIXME("no classfactory created for FX_CLSID %s, hres is 0x%08lx\n",
		//debugstr_guid(rclsid),hres);
		return hr;
	}

	/*
	* Create the object and don't forget to release the factory
	*/
	hr = lpclf->CreateInstance( pUnkOuter, iid, ppv );
	lpclf->Release();
	return hr;
}
コード例 #15
0
HRESULT __stdcall MyCoCreateInstance(
  LPCTSTR szDllName,
  IN REFCLSID rclsid,
  IUnknown* pUnkOuter,
  IN REFIID riid,
  OUT LPVOID FAR* ppv)
{
  HRESULT hr = REGDB_E_KEYMISSING;

  HMODULE hDll = ::LoadLibrary(szDllName);
  if (hDll == 0)
  {
	  HRESULT blah = GetLastError();
    return hr;
  }

  typedef HRESULT (__stdcall *pDllGetClassObject)(IN REFCLSID rclsid, 
                   IN REFIID riid, OUT LPVOID FAR* ppv);

  pDllGetClassObject GetClassObject = 
     (pDllGetClassObject)::GetProcAddress(hDll, "DllGetClassObject");
  if (GetClassObject == 0)
  {
    ::FreeLibrary(hDll);
    return hr;
  }

  IClassFactory *pIFactory;

  hr = GetClassObject(rclsid, IID_IClassFactory, (LPVOID *)&pIFactory);

  if (!SUCCEEDED(hr))
    return hr;

  hr = pIFactory->CreateInstance(pUnkOuter, riid, ppv);
  pIFactory->Release();

  return hr;
}
コード例 #16
0
    static HRESULT CreateInstance(
        REFCLSID clsid,
        REFIID   riid,
        _COM_Outptr_ void **ppv
    )
    {
        *ppv = NULL;

        HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;

        if(IsEqualGUID(clsid, CLSID_AvsCamMft0))
        {
            IClassFactory *pClassFactory = new (std::nothrow) CClassFactory();
            if(!pClassFactory)
            {
                return E_OUTOFMEMORY;
            }
            hr = pClassFactory->QueryInterface(riid, ppv);
            pClassFactory->Release();
        }
        return hr;
    }
コード例 #17
0
int main(int argc, char** argv)
{
	try
	{
#ifdef WIN32
		DllMain(0, DLL_PROCESS_ATTACH, 0);
#endif

		IClassFactory* pFact = 0;
		CheckHr(DllGetClassObject(CLSID_TestGenericFactory, IID_IClassFactory, (void**)&pFact));

		IUnknown* pTest = 0;
		CheckHr(pFact->CreateInstance(0, IID_IUnknown, (void**)&pTest));

		pFact->Release();
		pTest->Release();

#ifdef WIN32
		return DllMain(0, DLL_PROCESS_DETACH, 0) ? 0 : 1;
#else
		return 0;
#endif
	}
	catch (Throwable& thr)
	{
		std::cerr << "Failed HRESULT: " << thr.Error() << "\n";
	}
	catch (std::exception& e)
	{
		std::cerr << "Exception: " << e.what() << "\n";
	}
	catch (...)
	{
		std::cerr << "Unknown Exception:\n";
	}

	return 2;
}
コード例 #18
0
ファイル: common.cpp プロジェクト: nealey/vera
//----------------------------------------------------------------------
HRESULT __stdcall CoCreateInstanceNoReg(
  LPCTSTR szDllName,
  IN REFCLSID rclsid,
  IUnknown* pUnkOuter,
  IN REFIID riid,
  OUT LPVOID FAR* ppv,
  OUT HMODULE *phMod)
{
  // http://lallousx86.wordpress.com/2007/01/29/emulating-cocreateinstance/
  HRESULT hr = REGDB_E_CLASSNOTREG;
  HMODULE hDll;
  do
  {
    hDll = LoadLibrary(szDllName);
    if ( hDll == NULL )
      break;

    HRESULT (__stdcall *GetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv);
    *(FARPROC*)&GetClassObject = GetProcAddress(hDll, "DllGetClassObject");
    if ( GetClassObject == NULL )
      break;

    IClassFactory *pIFactory;
    hr = GetClassObject(rclsid, IID_IClassFactory, (LPVOID *)&pIFactory);
    if ( FAILED(hr) )
      break;

    hr = pIFactory->CreateInstance(pUnkOuter, riid, ppv);
    pIFactory->Release();
  } while (false);

  if ( FAILED(hr) && hDll != NULL )
    FreeLibrary(hDll);
  else
    *phMod = hDll;

  return hr;
}
コード例 #19
0
ファイル: AeroQSPFlash.cpp プロジェクト: Nesles/qsp
AeroQSPFlash::AeroQSPFlash(wxWindow *owner, const wxString &flashPath)
{
	_flashInterface = NULL;
	HINSTANCE hInst = ::CoLoadLibrary(wx2bstr(flashPath), TRUE);
	if (!hInst) return;
	CALL_PTR func = (CALL_PTR)::GetProcAddress(hInst, "DllGetClassObject");
	if (!func) return;
	IClassFactory *factory;
	UINT nRetCode = func(CLSID_ShockwaveFlash, IID_IClassFactory, (LPVOID *)&factory);
	if (nRetCode != S_OK) return;
	factory->AddRef();
	HRESULT hr = factory->CreateInstance(NULL, IID_IShockwaveFlash, (LPVOID *)&_flashInterface);
	factory->Release();
	if (SUCCEEDED(hr))
	{
		_flashInterface->AddRef();
		_flashInterface->PutBackgroundColor(0x00000000);
		_flashInterface->PutAllowScriptAccess(wx2bstr(wxT("always")));
		_flashInterface->DisableLocalSecurity();
		_flashInterface->PutMenu(0);
		_container = new wxActiveXContainer(owner, IID_IShockwaveFlash, _flashInterface);
	}
}
コード例 #20
0
ファイル: f2dVideoSysImpl.cpp プロジェクト: pascalkk/fancy2d
BOOL f2dVideoSysImpl::createInstanceFromDll(HINSTANCE hDll, REFCLSID rclsid, REFIID riid, LPVOID * ppv)
{
    typedef HRESULT (__stdcall *GETCLASS_PROC)(REFCLSID,REFIID,LPVOID*);
    
    GETCLASS_PROC procGetClassObject = (GETCLASS_PROC)GetProcAddress( hDll, "DllGetClassObject" ); 
    
    if( procGetClassObject )
    {
		IClassFactory* pFactory = NULL;
        
        HRESULT hr = procGetClassObject(rclsid, IID_IClassFactory, (void**)&pFactory);
		if(pFactory)
		{
			hr = pFactory->CreateInstance(NULL, riid, ppv);

			FCYSAFEKILL(pFactory);

			return *ppv!=NULL;
		}
    }
    
    return FALSE;
}
コード例 #21
0
ファイル: AAFObjectCreation.cpp プロジェクト: mcanthony/aaf
// Creates and returns an Impl object based on the given class ID.
// Will create the appropriate kind of API class and attach it.
//
// Implementation note:  This function does the following:
// 1) Create the API class.  (The API class will create the Impl class
//    and attach it.)
// 2) Ask the newly created API class for its contained Impl class.
// 3) Return that Impl class.
//
ImplAAFRoot * CreateImpl (const aafClassID_t & rClassID)
{
    IAAFRoot	*pIAAFRoot;
    ImplAAFRoot	*implRoot;
    HRESULT		hr;
    CLSID           classID;

    // Cast (by bitwise copy) from aafClassID_t to CLSID.
    //
    memcpy(&classID, &rClassID, sizeof(CLSID));

    // The reference implementation must be "self-contained". We do
    // not want any user supplied classes to be created and used
    // instead on one our built-in classes.
    //
    // The simplest change is to just simulate a call to
    // CoCreateInstance:
    //
    // This code is invoked within the current module so we
    // should just be able to call the DllGetClassObject entry point
    // instead of calling CoCreateInstance and searching the
    // registry.
    IClassFactory *pFactory = NULL;
    hr = DllGetClassObject(classID, IID_IClassFactory, (void **)&pFactory);
    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateInstance(NULL, IID_IAAFRoot, (void **)&pIAAFRoot);
        pFactory->Release();
    }

    if (SUCCEEDED(hr))
        pIAAFRoot->GetImplRep((void **)&implRoot);
    else
        implRoot = NULL;

    return (implRoot);
}
コード例 #22
0
ファイル: msvidctl.cpp プロジェクト: HBelusca/NasuTek-Odyssey
KSDDKAPI
HRESULT
WINAPI
DllGetClassObject(
    REFCLSID rclsid,
    REFIID riid,
    LPVOID *ppv)
{
    UINT i;
    HRESULT hres = E_OUTOFMEMORY;
    IClassFactory * pcf = NULL;	

    if (!ppv)
        return E_INVALIDARG;

    *ppv = NULL;

    for (i = 0; InterfaceTable[i].riid; i++) 
    {
        if (IsEqualIID(*InterfaceTable[i].riid, rclsid)) 
        {
            pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
            break;
        }
    }

    if (!pcf) 
    {
        return CLASS_E_CLASSNOTAVAILABLE;
    }

    hres = pcf->QueryInterface(riid, ppv);
    pcf->Release();

    return hres;
}
コード例 #23
0
bool CActiveXUI::DoCreateControl()
{
    ReleaseControl();
    // At this point we'll create the ActiveX control
    m_bCreated = true;
    IOleControl* pOleControl = NULL;

    HRESULT Hr = -1;
    if( !m_sModuleName.IsEmpty() ) {
        HMODULE hModule = ::LoadLibrary((LPCTSTR)m_sModuleName);
        if( hModule != NULL ) {
            IClassFactory* aClassFactory = NULL;
            DllGetClassObjectFunc aDllGetClassObjectFunc = (DllGetClassObjectFunc)::GetProcAddress(hModule, "DllGetClassObject");
            Hr = aDllGetClassObjectFunc(m_clsid, IID_IClassFactory, (LPVOID*)&aClassFactory);
            if( SUCCEEDED(Hr) ) {
                Hr = aClassFactory->CreateInstance(NULL, IID_IOleObject, (LPVOID*)&pOleControl);
            }
            aClassFactory->Release();
        }
    }
    if( FAILED(Hr) ) {
        Hr = ::CoCreateInstance(m_clsid, NULL, CLSCTX_ALL, IID_IOleControl, (LPVOID*)&pOleControl);
    }
    ASSERT(SUCCEEDED(Hr));
    if( FAILED(Hr) ) return false;
    pOleControl->QueryInterface(IID_IOleObject, (LPVOID*) &m_pUnk);
    pOleControl->Release();
    if( m_pUnk == NULL ) return false;
    // Create the host too
    m_pControl = new CActiveXCtrl();
    m_pControl->m_pOwner = this;
    // More control creation stuff
    DWORD dwMiscStatus = 0;
    m_pUnk->GetMiscStatus(DVASPECT_CONTENT, &dwMiscStatus);
    IOleClientSite* pOleClientSite = NULL;
    m_pControl->QueryInterface(IID_IOleClientSite, (LPVOID*) &pOleClientSite);
    CSafeRelease<IOleClientSite> RefOleClientSite = pOleClientSite;
    // Initialize control
    if( (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) != 0 ) m_pUnk->SetClientSite(pOleClientSite);
    IPersistStreamInit* pPersistStreamInit = NULL;
    m_pUnk->QueryInterface(IID_IPersistStreamInit, (LPVOID*) &pPersistStreamInit);
    if( pPersistStreamInit != NULL ) {
        Hr = pPersistStreamInit->InitNew();
        pPersistStreamInit->Release();
    }
    if( FAILED(Hr) ) return false;
    if( (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) == 0 ) m_pUnk->SetClientSite(pOleClientSite);
    // Grab the view...
    Hr = m_pUnk->QueryInterface(IID_IViewObjectEx, (LPVOID*) &m_pControl->m_pViewObject);
    if( FAILED(Hr) ) Hr = m_pUnk->QueryInterface(IID_IViewObject2, (LPVOID*) &m_pControl->m_pViewObject);
    if( FAILED(Hr) ) Hr = m_pUnk->QueryInterface(IID_IViewObject, (LPVOID*) &m_pControl->m_pViewObject);
    // Activate and done...
    m_pUnk->SetHostNames(OLESTR("UIActiveX"), NULL);
    if( m_pManager != NULL ) m_pManager->SendNotify((CControlUI*)this, _T("showactivex"), 0, 0, false);
    if( (dwMiscStatus & OLEMISC_INVISIBLEATRUNTIME) == 0 ) {
        Hr = m_pUnk->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, pOleClientSite, 0, m_pManager->GetPaintWindow(), &m_rcItem);
        //::RedrawWindow(m_pManager->GetPaintWindow(), &m_rcItem, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_INTERNALPAINT | RDW_FRAME);
    }
    IObjectWithSite* pSite = NULL;
    m_pUnk->QueryInterface(IID_IObjectWithSite, (LPVOID*) &pSite);
    if( pSite != NULL ) {
        pSite->SetSite(static_cast<IOleClientSite*>(m_pControl));
        pSite->Release();
    }
    return SUCCEEDED(Hr);
}
コード例 #24
0
ファイル: FlashControl.cpp プロジェクト: sskoruppa/Glove_Code
void FlashControl::createControl(HMODULE _lib)
{
	site = new FlashSite();
	site->AddRef();	
	site->Init(this);
	
	// Try to load from user-supplied Flash OCX first
	if (_lib)
	{
		typedef HRESULT (__stdcall *GetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID * ppv); 

		IClassFactory* factory = 0;
		GetClassObject getClassFunc = (GetClassObject)GetProcAddress(_lib, "DllGetClassObject");
		HRESULT result = getClassFunc(ShockwaveFlashObjects::CLSID_ShockwaveFlash, IID_IClassFactory, (void**)&factory);
		if (SUCCEEDED(result))
		{
			factory->CreateInstance(NULL, IID_IOleObject, (void**)&oleObject);
			factory->Release();	
		}
	}

	// If we still don't have the object, try loading from registry
	if (!oleObject)
	{
		HRESULT result = CoCreateInstance(ShockwaveFlashObjects::CLSID_ShockwaveFlash, 0, CLSCTX_INPROC_SERVER, IID_IOleObject, (void**)&oleObject);
		if (FAILED(result))
		{
			MYGUI_EXCEPT("Unable to load the Flash ActiveX control.");
		}
	}

	IOleClientSite* clientSite = 0;
	site->QueryInterface(__uuidof(IOleClientSite), (void**)&clientSite);
	oleObject->SetClientSite(clientSite);
	clientSite->Release();

	IOleInPlaceObject* inPlaceObject = 0;	
	oleObject->QueryInterface(__uuidof(IOleInPlaceObject), (LPVOID*)&inPlaceObject);			

	if (inPlaceObject)
	{
		invalidateTotally();

		inPlaceObject->SetObjectRects(&dirtyBounds, &dirtyBounds);
		inPlaceObject->Release();
	}

	oleObject->QueryInterface(__uuidof(ShockwaveFlashObjects::IShockwaveFlash), (LPVOID*)&flashInterface);

	flashInterface->PutWMode("opaque");

	oleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, 0, clientSite, 0, 0, 0);
	clientSite->Release();	
		
	oleObject->QueryInterface(__uuidof(IOleInPlaceObjectWindowless), (LPVOID*)&windowlessObject);
			
	handler = new FlashHandler();
	handler->AddRef();	
	handler->Init(this);

	IViewObject* curView = 0;
	flashInterface->QueryInterface(IID_IViewObject, (void**)&curView);
}
コード例 #25
0
ファイル: Util.cpp プロジェクト: kindleStudy/sumatrapdf
IDiaDataSource *LoadDia()
{
    if (g_dia_source)
        return g_dia_source;

    HRESULT hr = E_FAIL;

    // Try creating things "the official way"
    for (int i=0; msdiaDlls[i].Filename; i++)
    {
        hr = CoCreateInstance(msdiaDlls[i].UseCLSID,0,CLSCTX_INPROC_SERVER,
            __uuidof(IDiaDataSource),(void**) &g_dia_source);

        if (SUCCEEDED(hr)) {
            //logf("using registered dia %s\n", msdiaDlls[i].Filename);
            return g_dia_source;
        }
    }

    // None of the classes are registered, but most programmers will have the
    // DLLs on their system anyway and can copy it over; try loading it directly.

    for (int i=0; msdiaDlls[i].Filename; i++)
    {
        const char *dllName = msdiaDlls[i].Filename;
        // TODO: also try to find Visual Studio directories where it might exist. On
        // my system:
        // c:/Program Files/Common Files/microsoft shared/VC/msdia100.dll
        // c:/Program Files/Common Files/microsoft shared/VC/msdia90.dll
        // c:/Program Files/Microsoft Visual Studio 10.0/Common7/Packages/Debugger/msdia100.dll
        // c:/Program Files/Microsoft Visual Studio 10.0/DIA SDK/bin/msdia100.dll
        // c:/Program Files/Microsoft Visual Studio 11.0/Common7/IDE/Remote Debugger/x86/msdia110.dll
        // c:/Program Files/Microsoft Visual Studio 11.0/Common7/Packages/Debugger/msdia110.dll
        // c:/Program Files/Microsoft Visual Studio 11.0/DIA SDK/bin/msdia110.dll
        // c:/Program Files/Windows Kits/8.0/App Certification Kit/msdia100.dll
        // I'm sure Visual Studio 8 also puts them somewhere

        HMODULE hDll = LoadLibraryA(dllName);
        if (!hDll)
            continue;

        typedef HRESULT (__stdcall *PDllGetClassObject)(REFCLSID rclsid,REFIID riid,void** ppvObj);
        PDllGetClassObject DllGetClassObject = (PDllGetClassObject) GetProcAddress(hDll,"DllGetClassObject");
        if (DllGetClassObject)
        {
            // first create a class factory
            IClassFactory *classFactory;
            hr = DllGetClassObject(msdiaDlls[i].UseCLSID,IID_IClassFactory,(void**) &classFactory);
            if (SUCCEEDED(hr))
            {
                hr = classFactory->CreateInstance(0,__uuidof(IDiaDataSource),(void**) &g_dia_source);
                classFactory->Release();
                logf("using loaded dia %s\n", dllName);
                return g_dia_source;
            } else {
                logf("DllGetClassObject() in %s failed", dllName);
            }
        } else {
            logf("dia dll found as %s but is missing DllGetClassObject function", dllName);
        }
        FreeLibrary(hDll);
    }
    log("  couldn't find (or properly initialize) any DIA dll, copying msdia*.dll to app dir might help.\n");
    return NULL;
}
コード例 #26
0
int main()
{
	cout << "init com \n";

	if(FAILED(CoInitialize(NULL)))
	{
		cout << "init failed\n";
	}

	CLSID clsid;
	HRESULT hr = ::CLSIDFromProgID(L"Chapter2.Math.1", &clsid);
	if(FAILED(hr))
	{
		cout << "get CLISI from ProgId failed \n";
	}

	IClassFactory* pcf = NULL;

	hr = CoGetClassObject(
		clsid, 
		CLSCTX_INPROC,
		NULL,
		IID_IClassFactory,
		(void**)&pcf);

	if(FAILED(hr))
	{
		cout << "get IClass Factory failed \n";
	}

	IUnknown* pUnk = NULL;
	hr = pcf->CreateInstance(NULL, IID_IUnknown, (void**)&pUnk);
	
	pcf->Release();

	if(FAILED(hr))
	{
		cout << "get Iunkdown failed \n";
	}


	IMath* pMath = NULL;
	hr = pUnk->QueryInterface(IID_IMath, (void**)&pMath);
	pUnk->Release();
	
	if(FAILED(hr))
	{
		cout <<"get Imath failed \n";
	}

	long op = 1;
	long op2 = 3;
	long res = 0;
	pMath->Add(op, op2, res);

	cout << "Imath add : res = " << res << " \n";

	pMath->Subtract(op, op2, res);

	cout << "Imath subtract : res = " << res << " \n";


	system("pause");
}
コード例 #27
0
ファイル: PdbScanner.cpp プロジェクト: lmaisons/omr
DDR_RC
PdbScanner::loadDataFromPdb(const wchar_t *filename, IDiaDataSource **dataSource, IDiaSession **session, IDiaSymbol **symbol)
{
	DDR_RC rc = DDR_RC_OK;
	/* Attemt to co-create the DiaSource instance. On failure to find the required
	 * dll, instead attempt to find and load the dll first.
	 */
	HRESULT hr = CoCreateInstance(__uuidof(DiaSource), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiaDataSource), (void **)dataSource);
	if (FAILED(hr)) {
		ERRMSG("CoCreateInstance failed with HRESULT = %08lX", hr);
		static const char * const libraries[] = { "MSDIA140", "MSDIA120", "MSDIA100", "MSDIA80", "MSDIA70", "MSDIA60" };
		rc = DDR_RC_ERROR;
		for (size_t i = 0; i < sizeof(libraries) / sizeof(*libraries); ++i) {
			HMODULE hmodule = LoadLibrary(libraries[i]);
			if (NULL == hmodule) {
				ERRMSG("LoadLibrary failed for %s.dll", libraries[i]);
				continue;
			}
			BOOL (WINAPI *DllGetClassObject)(REFCLSID, REFIID, LPVOID) =
					(BOOL (WINAPI *)(REFCLSID, REFIID, LPVOID))
					GetProcAddress(hmodule, "DllGetClassObject");
			if (NULL == DllGetClassObject) {
				ERRMSG("Could not find DllGetClassObject in %s.dll", libraries[i]);
				continue;
			}
			IClassFactory *classFactory = NULL;
			hr = DllGetClassObject(__uuidof(DiaSource), IID_IClassFactory, &classFactory);
			if (FAILED(hr)) {
				ERRMSG("DllGetClassObject failed with HRESULT = %08lX", hr);
				continue;
			}
			hr = classFactory->CreateInstance(NULL, __uuidof(IDiaDataSource), (void **)dataSource);
			if (FAILED(hr)) {
				ERRMSG("CreateInstance failed with HRESULT = %08lX", hr);
			} else {
				ERRMSG("Instance of IDiaDataSource created using %s.dll", libraries[i]);
				rc = DDR_RC_OK;
				break;
			}
		}
	}

	if (DDR_RC_OK == rc) {
		hr = (*dataSource)->loadDataFromPdb(filename);
		if (FAILED(hr)) {
			ERRMSG("loadDataFromPdb() failed for file with HRESULT = %08lX. Ensure the input is a pdb and not an exe.\nFile: %ls", hr, filename);
			rc = DDR_RC_ERROR;
		}
	}

	if (DDR_RC_OK == rc) {
		hr = (*dataSource)->openSession(session);
		if (FAILED(hr)) {
			ERRMSG("openSession() failed with HRESULT = %08lX", hr);
			rc = DDR_RC_ERROR;
		}
	}

	if (DDR_RC_OK == rc) {
		hr = (*session)->get_globalScope(symbol);
		if (FAILED(hr)) {
			ERRMSG("get_globalScope() failed with HRESULT = %08lX", hr);
			rc = DDR_RC_ERROR;
		}
	}

	return rc;
}
コード例 #28
0
ファイル: CLIENT.cpp プロジェクト: Veselov-Dmitry/win32
int main( int argc, char *argv[] ) 
  { 
  printf( "Initializing COM \n"); 
  if ( FAILED( CoInitialize( NULL ))) 
  { 
	  printf( "Unable to initialize COM \n"); return -1; 
  } 
  char* szProgID = "Math.Component.1"; 
  WCHAR szWideProgID[128]; 
  CLSID clsid; 
  long lLen = MultiByteToWideChar( CP_ACP, 0, szProgID,strlen( szProgID ), szWideProgID, sizeof( szWideProgID ) ); 
  szWideProgID[ lLen ] = '\0'; 
  HRESULT hr = ::CLSIDFromProgID( szWideProgID, &clsid ); 
  if ( FAILED( hr )) 
  { 
	  printf("Unable to get CLSID from ProgID. HR = %X \n",hr); return -1;
  } 
  IClassFactory* pCF; 
  // Получить фабрику класса для CMath 
  hr = CoGetClassObject( clsid, CLSCTX_INPROC, NULL,IID_IClassFactory, (void**) &pCF ); 
  if ( FAILED( hr )) 
  { 
	  printf("Failed to GetClassObject server instance. HR = %X \n",hr); return -1; 
  } 
  
  // с помощью фабрики класса создать экземпляр 
  // компонента и получить интерфейс IUnknown. 
  
  IUnknown* pUnk; 
  hr = pCF->CreateInstance( NULL, IID_IUnknown, (void**) &pUnk ); 
  
  // Release the class factory pCF->Release(); 
  if ( FAILED( hr )) 
  { 
	  printf("Failed to create server instance. HR =%X \n",hr); return -1; 
  } 
  printf("Instance created \n"); 
  IMath* pMath = NULL; 
  hr = pUnk->QueryInterface( IID_IMath, (LPVOID*)&pMath ); 
  pUnk->Release(); 
  if ( FAILED( hr )) 
  { 
	  printf("QueryInterface() for IMath failed \n"); return -1; 
  } 
  
  long result; 

  pMath->Add(255,125,&result);
  printf("Func - Add: 255 + 125 is %d \n",result);

  pMath->Multiply( 30, 8, &result ); 
  printf("Func - Mltiply: 30 * 8 is %d \n",result); 

  pMath->Subtract( 200, 123, &result ); 
  printf("Func - Substract: 200 - 123 is %d \n",result);

  pMath->Divide(21,3,&result);
  printf("Func - Divide: 21 / 3 is %d \n",result);
  printf("Releasing instance \n"); 

  pMath->Release(); 
  printf("Shuting down COM\n"); 
  CoUninitialize();
  _getch();
  return 0; 
} 
コード例 #29
0
ファイル: AxWidget.cpp プロジェクト: fgokey/WidgetUI
bool AxContainer::CreateControl( const std::string &strModule, REFCLSID rclsid )
{
	IOleControl* pOleControl = NULL;

	HRESULT hr = -1;
	if( !strModule.empty() ) 
	{
		HMODULE hModule = ::LoadLibrary((LPCTSTR)strModule.c_str());
		if( hModule != NULL ) 
		{
			IClassFactory* aClassFactory = NULL;
			DllGetClassObjectFunc aDllGetClassObjectFunc = (DllGetClassObjectFunc)::GetProcAddress(hModule, "DllGetClassObject");
			hr = aDllGetClassObjectFunc(rclsid, IID_IClassFactory, (LPVOID*)&aClassFactory);
			if( SUCCEEDED(hr) ) 
			{
				hr = aClassFactory->CreateInstance(NULL, IID_IOleObject, (LPVOID*)&pOleControl);
			}
			aClassFactory->Release();
		}
	}
	if( FAILED(hr) ) 
		hr = ::CoCreateInstance(rclsid, NULL, CLSCTX_ALL, IID_IOleControl, (LPVOID*)&pOleControl);

	if( FAILED(hr) ) 
		return false;
	pOleControl->QueryInterface(IID_IOleObject, (LPVOID*) &m_pOleObject);
	pOleControl->Release();
	if( m_pOleObject == NULL ) 
		return false;

	hr = m_pOleObject->QueryInterface(IID_IOleInPlaceObjectWindowless, (LPVOID*) &m_pInPlaceObject);

	// More control creation stuff
	DWORD dwMiscStatus = 0;
	m_pOleObject->GetMiscStatus(DVASPECT_CONTENT, &dwMiscStatus);
	// Initialize control
	if( (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) != 0 ) 
		m_pOleObject->SetClientSite(this);
	IPersistStreamInit* pPersistStreamInit = NULL;
	m_pOleObject->QueryInterface(IID_IPersistStreamInit, (LPVOID*) &pPersistStreamInit);
	if( pPersistStreamInit != NULL )
	{
		hr = pPersistStreamInit->InitNew();
		pPersistStreamInit->Release();
	}
	if( FAILED(hr) ) 
		return false;
	if( (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) == 0 ) 
		m_pOleObject->SetClientSite(this);
	// Grab the view...
	hr = m_pOleObject->QueryInterface(IID_IViewObjectEx, (LPVOID*) &m_pViewObject);
	if( FAILED(hr) ) 
		hr = m_pOleObject->QueryInterface(IID_IViewObject2, (LPVOID*) &m_pViewObject);
	if( FAILED(hr) ) 
		hr = m_pOleObject->QueryInterface(IID_IViewObject, (LPVOID*) &m_pViewObject);

	// Activate and done...
	m_pOleObject->SetHostNames(OLESTR("UIActiveX"), NULL);
	if( (dwMiscStatus & OLEMISC_INVISIBLEATRUNTIME) == 0 ) 
		DoVerb(OLEIVERB_INPLACEACTIVATE);

	IObjectWithSite* pSite = NULL;
	m_pOleObject->QueryInterface(IID_IObjectWithSite, (LPVOID*) &pSite);
	if( pSite != NULL ) 
	{
		pSite->SetSite(static_cast<IOleWindow*>(this));
		pSite->Release();
	}

	return SUCCEEDED(hr);
}
コード例 #30
0
//---------------------------------------------------------------------
CFlashDXPlayer::CFlashDXPlayer(HMODULE flashDLL, unsigned int width, unsigned int height)
{
	m_userData = NULL;
	m_flashInterface = NULL;
	m_oleObject = NULL;
	m_windowlessObject = NULL;
	m_lastMouseX = 0;
	m_lastMouseY = 0;
	m_lastMouseButtons = 0;

	m_dirtyFlag = false;

	m_width = width;
	m_height = height;

	m_controlSite.Init(this);
	m_controlSite.AddRef();

	m_alphaBlackDC = NULL;
	m_alphaBlackBitmap = NULL;
	m_alphaBlackBuffer = NULL;
	m_alphaWhiteDC = NULL;
	m_alphaWhiteBitmap = NULL;
	m_alphaWhiteBuffer = NULL;

	HRESULT hr;

	typedef HRESULT (__stdcall *DllGetClassObjectFunc)(REFCLSID rclsid, REFIID riid, LPVOID * ppv);

	if (flashDLL != NULL)
	{
		IClassFactory* aClassFactory = NULL;
		DllGetClassObjectFunc aDllGetClassObjectFunc = (DllGetClassObjectFunc) GetProcAddress(flashDLL, "DllGetClassObject");
		hr = aDllGetClassObjectFunc(CLSID_ShockwaveFlash, IID_IClassFactory, (void**)&aClassFactory);

		if (FAILED(hr))
			return;

		aClassFactory->CreateInstance(NULL, IID_IOleObject, (void**)&m_oleObject);
		aClassFactory->Release();	
	}
	else
	{
		hr = CoCreateInstance(CLSID_ShockwaveFlash, NULL, CLSCTX_INPROC_SERVER, IID_IOleObject, (void**)&m_oleObject);

		if (FAILED(hr))
			return;
	}

	IOleClientSite* pClientSite = NULL;
	hr = m_controlSite.QueryInterface(__uuidof(IOleClientSite), (void**)&pClientSite);
	if (FAILED(hr))
		return;

	hr = m_oleObject->SetClientSite(pClientSite);
	if (FAILED(hr))
		return;

	hr = m_oleObject->QueryInterface(__uuidof(IShockwaveFlash), (void**)&m_flashInterface);
	if (FAILED(hr))
		return;

	m_flashInterface->DisableLocalSecurity();
	m_flashInterface->PutEmbedMovie(FALSE);
	m_flashInterface->PutAllowScriptAccess(L"always");
	SetTransparencyMode(IFlashDXPlayer::TMODE_OPAQUE);
	SetQuality(IFlashDXPlayer::QUALITY_HIGH);

	hr = m_oleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, pClientSite, 0, NULL, NULL);
	assert(SUCCEEDED(hr));

	pClientSite->Release();

	hr = m_oleObject->QueryInterface(__uuidof(IOleInPlaceObjectWindowless), (void**)&m_windowlessObject);
	assert(SUCCEEDED(hr));

	m_flashSink.Init(this);
	m_flashSink.AddRef();

	// Resize player
	ResizePlayer(width, height);
}