【问题标题】:How to import two DLLs with the same name (x86 and x64)?如何导入两个同名的 DLL(x86 和 x64)?
【发布时间】:2020-03-02 07:02:42
【问题描述】:

当我从两个 DLL(一个用于 32 位,另一个用于 64 位)导入一个函数时,我得到一个错误,有没有办法做到这一点?

我试过的代码是这样的:

function DriverPackageInstallW(DriverPackageInfPath: Integer; Flags: Cardinal; pInstallerInfo: AnsiString ; pNeedReboot: Boolean): Cardinal;
external 'DriverPackageInstallW@files:difxapi_x86.dll';

function DriverPackageInstallW(DriverPackageInfPath: Integer; Flags: Cardinal; pInstallerInfo: AnsiString ; pNeedReboot: Boolean): Cardinal;
external 'DriverPackageInstallW@files:difxapi_x64.dll';

我收到的错误是这样的:

重复标识符“DRIVERPACKAGEINSTALLW”

【问题讨论】:

    标签: dll inno-setup 32bit-64bit pascalscript


    【解决方案1】:

    回答您的字面问题:您可以将这些函数以不同的名称导入 Inno Setup/Pascal 脚本。

    function DriverPackageInstallW_32(DriverPackageInfPath: Integer; Flags: Cardinal; pInstallerInfo: AnsiString ; pNeedReboot: Boolean): Cardinal;
    external 'DriverPackageInstallW@files:difxapi_x86.dll';
    
    function DriverPackageInstallW_64(DriverPackageInfPath: Integer; Flags: Cardinal; pInstallerInfo: AnsiString ; pNeedReboot: Boolean): Cardinal;
    external 'DriverPackageInstallW@files:difxapi_x64.dll';
    

    但是!您不能将 64 位 DLL 加载到 32 位 Inno Setup 进程中。那是行不通的。

    通常,您不能在一个进程中混合使用 32 位和 64 位代码。


    如果您需要在 Inno Setup(或任何 32 位应用程序)中调用 64 位 DLL,则必须引入一个加载和调用 DLL 的帮助程序 64 位 EXE。您可以在 Inno Setup 中执行该帮助程序 EXE。

    【讨论】:

    • Martin,谢谢你的澄清,我试试,我只是担心 UAC(用户帐户控制)在安装过程中会出现两次..
    • 不,不应该。从已经提升的应用程序运行应用程序时,不再需要 UAC。
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多