pupsik писал(а):Ответьте на такое: загрузит ли 32 битное приложение 32 битную и 64 битную длл? Т.е. простая загрузка, через стандартный loadlyb.... Без проверок. По идее должно.
Не загрузит, потому что 32-битным приложениям запрещено загружать 64-битные dll-ки.
pupsik писал(а):Ведь "морда-лица" формы и компонентов лазаря берутся из системных длл винды... Но мне интересно ваше мнение...
Морда-лица загружается из системных длл винды, для которых есть 32-битная версия.
Об этом очёнь чётко пишут сами мелгомягкие. Если ты счастливый обладатель Виндоус 64, то можешь смело идти в папку установленной винды (C:\Windows), и в ней найти папку SysWOW64. Внутри этой папки лежат все системные dll-ки (например kernel32.dll и user32.dll) которые исползьуются всеми 32-битными программами. В частности они содержат библиотеки морды-лица 32-битных приложения собранных на Лазарусе.
Практика. Или почему следует не игнорировать ошибки, а хотя бы их в журнальчик писать.
Пишем такой код, который ничего не делает, кроме попытки загрузить указанную dll-ку
- Код: Выделить всё
program loadalib;
{$mode delphi}
uses
Windows;
var
lib: HINST;
s : string;
err : LongWord;
begin
{$ifdef cpu32}
writeln('I AM 32-bit application!');
{$endif}
{$ifdef cpu64}
writeln('I AM 64-bit application!');
{$endif}
if ParamCount=0 then begin
writeln('please specify .dll to load');
Exit;
end;
s:=ParamStr(1);
writeln('Loading: ', s);
lib:=LoadLibraryA(PChar(s));
if lib=0 then begin
err:=GetLastError;
writeln('ERROR: ',err);
if err=ERROR_BAD_EXE_FORMAT then
writeln('Bad format or platform is not supported!');
end else
writeln('Library loaded');
end.
Компилируем его с помощью FPC для любой архитетуры по вкусу. (я собрал, естественно для 32-битов, хотя сам сижу на 64-битной винде).
Теперь идём на сайт 7-zip и скачиваем там архив под описанием "7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager". Прямая ссылка.
Чем этот архивчик хорош?! тем, что в нём есть и 32х битная и 64х битная версия библиотеки 7zip-а.
Запускаем программу сначала для 32-битной версии длл-ки
- Код: Выделить всё
loadalib.exe 7za.dll
Результат
- Код: Выделить всё
I AM 32-bit application!
Loading: 7za.dll
Library loaded
Запускаем программу для 64-битной версии длл-ки
- Код: Выделить всё
loadalib.exe x64\7za.dll
Результат
- Код: Выделить всё
I AM 32-bit application!
Loading: x64\7za.dll
ERROR: 193
Bad format or platform is not supported!
Предлагаю всем желающим поиграться, и высказаться на тему этого проекта.
Так что имея такие результаты, мне очень интересно твоё "просто решение" с простой заменой одних длл-ок на другие.
Я прекрасно понимаю, что всё это было 5 лет назад и давно, и откуда .длл-ки ты копировал, ты уже не вспонишь.
Но вот "objdump", который я прошу запустить, уже не первый пост, тебе бы мог рассказать, что это за длл-ки такие - 32 или 64-х битные.
Заодним objdump можно натравить и на саму программу, и узнать 32 или 64 битная программа.
Ведь написать "objdump -f имяобъектного" файла, это же намного быстрее и короче, чем очередной пост, в котором будет излагаться, что я что-то опять каверкаю?!