今天碰到这种情况:
需要重新注册某个COM组件,但是在注册前希望可以检测当时组件是否可用,
1 CLSID const clsid = {XXX}; 2 LPUNKNOWN pUnknow = NULL; 3 const LRESULT lr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IUnknown,(LPVOID*)&pUnknow); 4 if(lr!=REGDB_E_CLASSNOTREG && NULL!=pUnknow){ 5 bRes = TRUE; 6 } 7 if(pUnknow){ 8 pUnknow->Release(); 9 }
随后需要删除该组件文件(DLL),然后放置新的组件重新注册。
但是却发现组件无法删除,错误代码是文件被占用。
以前已碰到过类似的问题,需要在测试完组件后强制让系统卸载加载组件。
CoFreeUnusedLibraries();
原因是我们刚才使用就该组件创建实例,实际就是系统把该组件文件(DLL,OCX)加载到当前进程地址空间中,所以操作组件文件的话会提示文件占用。
如果反注册改组件然后再删除是否能成功呢?这个留给有心人吧