大漠对象的创建
方法一:
WinExec("regsvr32.exe dm.dll /s",SW_SHOW); Cdmsoft dm; CoInitialize(NULL); CLSID clsid; HRESULT hr=CLSIDFromProgID(OLESTR("dm.dmsoft"),&clsid); Idmsoft *ptr; hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(Idmsoft),(LPVOID*)&ptr); string s = ptr->Ver(); CoUninitialize();
方法二:免注册方式
//创建新的大漠对象 Idmsoft *InitNewDm() { Idmsoft *m_dm = NULL; //COleVariant temp1,temp2; bool m_bInit = false; //下面直接加载dll创建对象,避免进行注册文件 typedef HRESULT (__stdcall * pfnGCO) (REFCLSID, REFIID, void**); pfnGCO fnGCO = NULL; HINSTANCE hdllInst = LoadLibrary("dm.dll"); fnGCO = (pfnGCO)GetProcAddress(hdllInst, "DllGetClassObject"); if (fnGCO != 0) { IClassFactory* pcf = NULL; HRESULT hr=(fnGCO)(__uuidof(dmsoft), IID_IClassFactory, (void**)&pcf); if (SUCCEEDED(hr) && (pcf != NULL)) { hr = pcf->CreateInstance(NULL, __uuidof(Idmsoft), (void**)&m_dm); if ((SUCCEEDED(hr) && (m_dm != NULL))==FALSE) return false; } pcf->Release(); m_bInit=true; } else m_bInit=false; return m_dm; };