不注冊COM組件直接調用接口


本文以COM組件AppTest.dll為例,AppTest.dll中提供了ITest接口,在不使用regsvr32命令向系統注冊的情況下創建ITest接口並調用。

一、導入組件或類型庫;

    在C++中使用COM組件,組件需要帶有類型庫,以公開接口和方法。類型庫文件類型為tlb文件,直接#import導入即可。類型庫也可以以資源形式編譯進COM組件Dll內部,資源類型為TYPELIB,資源號為1即可。如果Dll中已包含類型庫,只需#import導入COM組件Dll文件即可。代碼如下:

#import "AppTest.dll"

二、動態載入COM組件並創建接口。

ITestPtr pTest = NULL;
IClassFactoryPtr pClassFactory = NULL;

HMODULE hMudule = ::LoadLibrary(_T("AppTest.dll"));
if (hModule)
{
	pfnDllGetClassObject pDllGetClassObject = (pfnDllGetClassObject)::GetProcAddress(hMudule, "DllGetClassObject");
	if (pDllGetClassObject)
	{
	      HRESULT hr = pDllGetClassObject(__uuidof(AppTest::Test), IID_IClassFactory, (LPVOID*)&pClassFactory);
	      if (S_OK == hr)
	      {
	          hr = pClassFactory->CreateInstance(NULL, __uuidof(AppTest::ITest), (LPVOID*)&pTest);
	          if (S_OK == hr)
	          {
	                AfxMessageBox(_T("Succeed !"));
	          }
	      } 
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM