我曾经使用以下函数在 Window XP 和 Windows 7 等 32 位 Windows 平台上注册我的 32 位 COM/DLL 组件。它工作正常。但在 64 位 Windows 7 上运行时,该功能无法注册成功。结果如预期!
int RegisterComponent(LPCTSTR lpszDllName)
{
// Load the library
HINSTANCE hLib = LoadLibrary(lpszDllName);
if (hLib == NULL)
{
return -2;
}
typedef HRESULT (CALLBACK *HCRET)(void);
HCRET lpfnDllRegisterServer;
// Find the entry point
lpfnDllRegisterServer = (HCRET)GetProcAddress(hLib, "DllRegisterServer");
if (lpfnDllRegisterServer == NULL)
{
return -3;
}
// Call the function by function pointer..
if (FAILED((*lpfnDllRegisterServer)()))
{
//DLL Registration failed..
return -4;
}
FreeLibrary(hLib);
return 0;
}
我可以使用以下命令手动注册 32 位 COM 组件:C:\Windows\SysWOW64>regsvr32
如何在不同的目标平台(例如,X86 和 X64)上以编程方式智能地注册 32 位 COM/DLL 组件?
int RegisterComponent(LPCTSTR lpszDllName)
{
if ( IsWow64() )
{
...
}
else
{
...
}
return 0;
}
非常感谢!