Загрузить 32-битную библиотеку DLL в 64-битное приложение - PullRequest
35 голосов
/ 15 февраля 2010

Есть ли способ загрузить 32-битную библиотеку DLL (что-то такое же использование, что и LoadLibrary), я хотел бы использовать эту функцию вместе с GetProcAddress.

Я посмотрел на WOW, но, похоже, он не предлагает функциональность. Функциональность должна существовать, так как такие инструменты, как DependencyWalker, способны читать символы 32-битной библиотеки DLL, даже если она 64-битная.

спасибо

Ответы [ 3 ]

48 голосов
/ 15 февраля 2010

Извините, но вы можете загрузить 32-битную DLL в 64-битный процесс только при загрузке dll как файла данных Вы не можете выполнить код. http://support.microsoft.com/kb/282423

Microsoft рекомендует использовать межпроцессный COM для использования 32-битного кода с 64-битным приложением. Вот статья, объясняющая процесс http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ Это не весело.

2 голосов
/ 15 февраля 2010

Существует разница между чтением 32-битного исполняемого файла и выполнением кода в 32-битном исполняемом файле. Я не верю, что Windows предлагает какую-либо функциональность для этого.

Единственный способ, которым вы можете это сделать, - это создать 32-битный процесс, который загружает DLL, а затем выполняет межпроцессное взаимодействие для передачи результатов между двумя процессами.

1 голос
/ 11 мая 2017

Если все, что вы хотите сделать, это получить от него ресурсы, вы можете загрузить их как файл данных:

LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE);

Затем позвоните FindResource как обычно.

...