Декларирование 32 bit DLL в 64 bit VBA

HOME_X
Дата: 31.12.2019 19:58:39
С Новым годом господа !

Имею 32 bit DLL созданную компилятором Delphi 7
Пытаюсь задекларир-ть функцию в 32 bit VBA Excel - порядок
  Private Declare Function MyFunction Lib "mydll.dll" (ByVal filename As String) As Long


Аналогичное сделал в 64 bit версии Excel - ошибка - "НЕТ файла DLL"
  Private Declare PtrSafe Function MyFunction Lib "mydll.dll" (ByVal filename As String) As Long


Особенность DLL созданные Microsoftom - 32 bit декларирую-ся нормально
Declare Function GetActiveWindow Lib "user32" () As Long
Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long


Скомпилированную версией Delphi - не может найти как файл.
Кто-то сталкивался с такой ситуацией ?

Спасибо.

P.S. - смену компилятора не предлагать - пока нет возможности.
Michael Longneck
Дата: 31.12.2019 20:14:29
user32 в данном случае вовсе не означает, что будет загружена 32bit версия dll. Просто и 64bit называется user32.dll. А так, понятное дело, в 64 разрядном приложении нельзя использовать 32 битные dll
HOME_X
Дата: 01.01.2020 00:22:28
Michael Longneck
user32 в данном случае


Это пример подключения

Вы хотели сказать что если к примеру заменить user32.dll взять ее из 32-bit версии OS
в Microsofte - то ТОЖЕ не будет работать ?
Michael Longneck
Дата: 01.01.2020 00:49:01
Разумеется. Без специальных сложных и неоправданных ухищрений работать не будет. В случае же user32.dll я не уверен даже, что возможно её "взять" не той битности.
x1ca4064
Дата: 01.01.2020 01:47:42
HOME_X


Вы хотели сказать что если к примеру заменить user32.dll взять ее из 32-bit версии OS
в Microsofte - то ТОЖЕ не будет работать ?


А как это может работать чисто технически? Когда загружается длл, она просто попадает в адресное пространство процесса, функции длл ничем не отличаются от функций из родного процесса ( в том смысле, что для их вызова используется CALL, а не прерывание). x64 и x86, это, считай, два разных процессора, с таким же успехом можно пробовать выполнить код процессора другой архитектуры, ARM, например.
Когда был переход Win16->Win32 в ntvdm создали специальный механизм, который позволял (с болью) вызывать 16битные длл из Win32, сейчас такого механизма (Win64<->Win32) нет, насколько я знаю. Хотя, такой механизм, наверное, можно создать.
ziv-2014
Дата: 01.01.2020 12:22:22
HOME_X,
HOME_X
Аналогичное сделал в 64 bit версии Excel - ошибка - "НЕТ файла DLL"

Потому что нельзя загружать 32 битные dll в 64 битный процесс.