C++ 如何在不同的目标平台上以编程方式智能注册32位COM/DLL组件?
我曾经使用以下函数在32位Windows平台(如Windows XP和Windows 7)上注册我的32位COM/DLL组件。它很好用。但在64位Windows 7上运行时,该函数无法成功注册。结果如预期C++ 如何在不同的目标平台上以编程方式智能注册32位COM/DLL组件?,c++,windows,com,64-bit,C++,Windows,Com,64 Bit,我曾经使用以下函数在32位Windows平台(如Windows XP和Windows 7)上注册我的32位COM/DLL组件。它很好用。但在64位Windows 7上运行时,该函数无法成功注册。结果如预期 int RegisterComponent(LPCTSTR lpszDllName) { // Load the library HINSTANCE hLib = LoadLibrary(lpszDllName); if (hLib == NULL) {
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组件
多谢各位 32位DLL可以加载到32位进程,64位DLL可以加载到64位进程。您的代码(连续)可以是32位或64位。也就是说,如果不启动正确的位进程,就无法注册不同位的DLL 您可以选择:
CreateProcess
“regsvr32-the-DLL/s”,它将执行注册,或者启动另一个子系统来注册不同的位32位DLL可以加载到32位进程中,64位DLL可以加载到64位进程中。您的代码(连续)可以是32位或64位。也就是说,如果不启动正确的位进程,就无法注册不同位的DLL 您可以选择:
CreateProcess
“regsvr32-the-DLL/s”,它将执行注册,或者启动另一个子系统来注册不同的位int RegisterComponent(LPCTSTR lpszDllName)
{
if ( IsWow64() )
{
...
}
else
{
...
}
return 0;
}