如何从32位应用程序注册64位DLL(在64位操作系统上)
问题描述:
我当前使用以下函数来注册处理上下文菜单调用的dll。如何从32位应用程序注册64位DLL(在64位操作系统上)
function RegisterLibrary(szLibrary: String): Integer;
var
hLib: THandle;
drs: TDllRegisterServer;
begin
// Attempt to load the library
hLib := LoadLibrary(PChar(szLibrary));
// Handle check
if IsHandle(hLib) then
begin // Get the register function
@drs := GetProcAddress(hLib, LIB_REGISTER);
if Assigned(@drs)
then Result := drs // Make the function call
else Result := GetLastError; // Return last error
// Unload the library
FreeLibrary(hLib);
end else
Result := GetLastError; // Return last error
end;
不幸的是,它试图从我的32位应用程序注册64位DLL时不起作用。
是否有任何替代方法从我的32位应用程序(Delphi编译)注册我的64位DLL(用免费pascal编译)?
我想我可以调用C:\ WINDOWS \ SYSTEM \ regsvr32.exe的”/S “文件名”,但想知道如果我有任何其他替代
感谢
答
没有,一! 32位进程无法加载一个64位的dll,你将不得不去调用一个64位的进程,为你注册dll
答
你将不得不使用64位进程来执行注册,因为32位bit Delphi程序无法将64位DLL加载到其地址空间中。
如果你不想自己编写代码,那么你可以看看Inno Setup源代码。有一个64位助手应用程序的Visual Studio项目,单元Helper.pas
有调用外部帮助程序的代码,因此您可以简单地使用它包含的HelperRegisterTypeLibrary()
函数。
为什么选择投票?我说什么不是这个问题的正确答案? – 2009-09-19 14:30:06
这一切都出来了;) – rpetrich 2009-09-19 14:50:58