次の関数を使用して、32 ビットの COM/DLL コンポーネントを Window XP や Windows 7 などの 32 ビット Windows プラットフォームに登録したことがあります。正常に動作します。ただし、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
32 ビットの COM/DLL コンポーネントをさまざまなターゲット プラットフォーム (X86 や X64 など) でプログラムによってスマートに登録する方法は?
int RegisterComponent(LPCTSTR lpszDllName)
{
if ( IsWow64() )
{
...
}
else
{
...
}
return 0;
}
どうもありがとうございました!