如何导入两个同名的DLL(x86和x64)



当我从两个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';

我收到的错误是:

重复标识符"DRIVERPACGEINSSTALLW">

要回答您的文字问题:您可以将这些函数以不同的名称导入到Inno Setup/Pascal Script中。

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。