2009-09-19 168 views
3

我当前使用以下函数来注册处理上下文菜单调用的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 “文件名”,但想知道如果我有任何其他替代

感谢

回答

7

没有,一! 32位进程无法加载一个64位的dll,你将不得不去调用一个64位的进程,为你注册dll

+0

为什么选择投票?我说什么不是这个问题的正确答案? – 2009-09-19 14:30:06

+0

这一切都出来了;) – rpetrich 2009-09-19 14:50:58

4

你将不得不使用64位进程来执行注册,因为32位bit Delphi程序无法将64位DLL加载到其地址空间中。

如果你不想自己编写代码,那么你可以看看Inno Setup源代码。有一个64位助手应用程序的Visual Studio项目,单元Helper.pas有调用外部帮助程序的代码,因此您可以简单地使用它包含的HelperRegisterTypeLibrary()函数。

相关问题