一个替代“regsvr32.exe"COM组件注册工具的方法是手动调用COM模块中的DllRegisterServer.
步骤如下
1. 定义DllRegisterServer的函数指针类型
2. 调用LoadLibrary()加载COM模块
3. 调用GetProcAddress()获得DllRegisterServer的地址
4. 调用OleInitialize()初始化COM库
5. 使用之前得到的地址调用DllRegisterServer
6. 执行必要的清理工作: 清理COM库,卸载DLL
经过测试的代码实例
typedef HRESULT (WINAPI *FREG)();
// @strPathName[in]: COM组件的路径和文件名
BOOL Register(const CString& strPathName)
{
HMODULE hMod =::LoadLibrary(strPathName);
if(!hMod)
return FALSE;
// 这一步是必须的,我在网上查到的例子没有提到,
// 耽误很多时间
HRESULT hResult = ::OleInitialize(NULL);
if(hResult != S_OK)
{
::FreeLibrary(hMod);
return FALSE;
}
FREG lpfunc = (FREG)::GetProcAddress(hMod, _T("DllRegisterServer"));
if(!lpfunc)
{
::FreeLibrary(hMod);
::OleUninitialize();
return FALSE;
}
hResult = lpfunc();
::OleUninitialize();
::FreeLibrary(hMod);
return (hResult == S_OK);
}
对DllUnregisterServer的调用类同,一定要初始化COM库再调用。
调用DllRegisterServer方法进行COM组件的注册
最新推荐文章于 2024-04-17 17:05:22 发布
调用DllRegisterServer方法进行COM组件的注册