Форум: "WinAPI";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизПодключить 32 битную библиотеку к 16 битному приложению. Найти похожие ветки
← →
Ganda © (2007-05-26 12:06) [0]как можно подключить
32 битную библиотеку к 16 битному приложению?
Собственно говоря и весь вопрос!!
← →
ganda © (2007-05-28 06:27) [1]Перефразирую вопрос!
Как можно вызвать процедуру(функцию) из 32-bit DLL в 16-bit приложении?!
← →
SlymRO © (2007-05-28 06:52) [2]ganda © (28.05.07 6:27) [1]
через 16битный стаб-exe
аля rundll16.exe dll16.dll,MyProc
← →
Leonid Troyanovsky © (2007-05-28 07:14) [3]
> ganda © (28.05.07 06:27) [1]
> Как можно вызвать процедуру(функцию) из 32-bit DLL в 16-
> bit приложении?!
http://support.microsoft.com/kb/104009
--
Regards, LVT.
← →
SlymRO © (2007-05-28 08:05) [4]от я протупил... надо то наоборот :)
← →
ganda © (2007-05-28 15:10) [5]вот что у меня получилось при активном поиске в инете!!
Загрузка DLL-ки происходит нормально, получения адресса процедуры так же все нормально!! Как только вызываешь саму процедуру возникает ошибка!!Kernel386Handle:=LoadLibrary("KRNL386.Exe");
@LoadLibraryEx32W:=GetProcAddress(Kernel386Handle,"LoadLibraryEx32W");
@GetProcAddress32W:= GetProcAddress(Kernel386Handle,"GetProcAddress32W");
@FreeLibrary32W:=GetProcAddress(Kernel386Handle,"FreeLibrary32W");
Handle_twojego_dll:=LoadLibraryEx32W("RNiONFLK",nil,0);
if Handle_twojego_dll <> nil then
begin
@DLL := GetProcAddress32W(Handle_twojego_dll, PChar(LongInt(1)));
if addr(DLL) <> nil then
DLL;
end;
FreeLibrary32W(Handle_twojego_dll);
FreeLibrary(Kernel386Handle);
Отдельное спасибо Leonid Troyanovsky!
← →
Сергей М. © (2007-05-28 15:31) [6]
> Как только вызываешь саму процедуру возникает ошибка
Как же ей не возникнуть, если значение в переменной DLL после вызова GetProcAddress32W не являет собой валидный адрес в АП тек.процесса ?
Вот же пример:
http://www.tenermerx.com/owlhow/items/miscellaneous/thunk/index.html
Почему ему не последовать ?
← →
Leonid Troyanovsky © (2007-05-28 15:40) [7]
> ganda © (28.05.07 15:10) [5]
> Отдельное спасибо Leonid Troyanovsky!
Не знаю, за что отдельное, но я советовал прочитать статью:
The basic steps for calling a function through generic thunking are:
• Call LoadLibraryEx32W() to load the Win32 DLL.
• Call GetProcAddress32W() to get the address of the DLL routine.
• Call the DLL routine using CallProc32W() or CallProcEx32W.
Ищущий да обрящет.
--
Regards, LVT.
← →
ganda © (2007-05-29 07:41) [8]Как вызывать 32-bit DLL из 16-bit приложения разобрался и как передавать параметры!
А вот как можно получить результат выполняемой функции!
Ведь процедура CallProc32W возвращает только тип LongInt!
← →
Сергей М. © (2007-05-29 08:30) [9]Покажи прототип вызываемой из dll ф-ции..
← →
Ganda © (2007-05-29 08:37) [10]Сергей М. © (29.05.07 08:30) [9]
function Test(const AText : String) : TObject;stdcall;
← →
Сергей М. © (2007-05-29 08:55) [11]
> Ganda © (29.05.07 08:37) [10]
Ну хорошо.
Пусть, предположим, ф-ция CallProc32W имеет возможность вернуть этот самый TObject.
И что 16-битное приложение будет делать с этим TObject"ом ?
Это ж не иначе как басня Крылова получится, про мартышку с очками)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c