如何导入两个同名的 DLL(x86 和 x64)?
Posted
技术标签:
【中文标题】如何导入两个同名的 DLL(x86 和 x64)?【英文标题】:How to import two DLLs with the same name (x86 and 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”
【问题讨论】:
【参考方案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。以上是关于如何导入两个同名的 DLL(x86 和 x64)?的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 x64 注入器的 x86 dll 注入 x86 目标
如何知道在构建中使用哪个 cpu(x86 x64 或 AnyCpu)?