1. 定义导出函数指针
//定义函数指针 typedef HRESULT (_stdcall *Func) (REFCLSID , REFIID , LPVOID*); Func g_DllGetClassObject=NULL;
2.导出COM组件这个DLL 的 DllGetClassObject函数
if (g_DllGetClassObject==NULL) { CString strParam = theApp.strRootDirectory + TEXT("//MMGifCtrl.dll"); HMODULE module=LoadLibrary(strParam.GetBuffer(0)); if (module!=NULL) { g_DllGetClassObject= (Func) GetProcAddress(module,"DllGetClassObject"); } }
3.通过 DllGetClassObject 获得COM的类厂 ,然后通过类厂获得所要的接口
IMMGifCtrl * pShowGif = NULL; CComQIPtr<IClassFactory> pGifFactory; HRESULT hr; //如果 g_DllGetClassObject不为空 if (g_DllGetClassObject) { hr= g_DllGetClassObject(__uuidof(CMMGifCtrl), IID_IClassFactory,(LPVOID*)&pGifFactory); if (hr ==S_OK) { pGifFactory->CreateInstance(NULL,__uuidof(IMMGifCtrl),(LPVOID*)&pShowGif); if (pShowGif) { //成功获得COM接口 } }