Как импортировать две DLL с одинаковыми именами (x86 и x64)? - PullRequest
2 голосов
/ 05 ноября 2019

Когда я импортирую функцию из двух 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 Ответ

3 голосов
/ 05 ноября 2019

Чтобы ответить на ваш буквальный вопрос : вы можете импортировать эти функции под другим именем в 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-битный код в одном процессе.


Если вам нужно вызвать 64-битную DLL в Inno Setup(или в любом 32-разрядном приложении) вам потребуется ввести вспомогательный 64-разрядный EXE-файл, который загружает и вызывает DLL. Вы можете запустить этот вспомогательный EXE в Inno Setup.

...