3,245
社区成员
发帖
与我相关
我的任务
分享
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
LPOLESTR str;
StringFromIID(riid, &str);
CString strIID;
strIID.Format(_T("%ws.\n"), str);
OutputDebugString(strIID.GetBuffer());
CoTaskMemFree(str);
return AfxDllGetClassObject(rclsid, riid, ppv);
}
HRESULT FAR EXPORT CWzdSrv::XWzdClass::QueryInterface(REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CWzdSrv, WzdClass);
LPOLESTR str;
StringFromIID(iid, &str);
CString strIID;
strIID.Format(_T("%ws.\n"), str);
OutputDebugString(strIID.GetBuffer());
CoTaskMemFree(str);
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IClassFactory *pCF=NULL;
hr=::CoGetClassObject(
CLSID_IWzdSrv, // name of dll to load
CLSCTX_INPROC_SERVER,// use dll
NULL, // for DCOM, a COSERVERINFO structure that id's the remote server
// more typically set using OLEView
IID_IClassFactory, // the class factory interface (all COM DLL/EXE's must have this interface)
(LPVOID*)&pCF);
if ( FAILED(hr) )
return ret;
IWzd* iWzd = NULL;
hr = pCF->CreateInstance(
NULL, // aggregated COM object (none)
IID_IWzd, // class to create and object of
(LPVOID*) &iWzd); // returned object pointer
iWzd->Method2(1, 2);