Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подключить 32 битную библиотеку к 16 битному приложению. [D1, D7, Win95/98, WinME, NT4, Win2k, WinXP]


Ganda ©   (2007-05-26 12:06:00) 

как можно подключить
32 битную библиотеку к 16 битному приложению?
Собственно говоря и весь вопрос!!


Сергей М.   (2007-05-29 08:55:00) [1]


> Ganda ©   (29.05.07 08:37) [10]


Ну хорошо.
Пусть, предположим, ф-ция CallProc32W имеет возможность вернуть этот самый TObject.

И что 16-битное приложение будет делать с этим TObject'ом ?

Это ж не иначе как басня Крылова получится, про мартышку с очками)


Ganda   (2007-05-29 08:37:00) [2]

Сергей М. ©   (29.05.07 08:30) [9]

function Test(const AText : String) : TObject;stdcall;


Сергей М.   (2007-05-29 08:30:00) [3]

Покажи прототип вызываемой из dll ф-ции..


ganda   (2007-05-29 07:41:00) [4]

Как вызывать 32-bit DLL из 16-bit приложения разобрался и как передавать параметры!
А вот как можно получить результат выполняемой функции!
Ведь процедура CallProc32W возвращает только тип LongInt!


Leonid Troyanovsky   (2007-05-28 15:40:00) [5]


> 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.


Сергей М.   (2007-05-28 15:31:00) [6]


> Как только вызываешь саму процедуру возникает ошибка


Как же ей не возникнуть, если значение в переменной DLL после вызова GetProcAddress32W не являет собой валидный адрес в АП тек.процесса ?

Вот же пример:

http://www.tenermerx.com/owlhow/items/miscellaneous/thunk/index.html

Почему ему не последовать ?


ganda   (2007-05-28 15:10:00) [7]

вот что у меня получилось при активном поиске в инете!!
Загрузка 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!


SlymRO   (2007-05-28 08:05:00) [8]

от я протупил... надо то наоборот :)


Leonid Troyanovsky   (2007-05-28 07:14:00) [9]


> ganda ©   (28.05.07 06:27) [1]

> Как можно вызвать процедуру(функцию) из 32-bit DLL в 16-
> bit приложении?!

http://support.microsoft.com/kb/104009

--
Regards, LVT.


SlymRO   (2007-05-28 06:52:00) [10]

ganda ©   (28.05.07 6:27) [1]
через 16битный стаб-exe
аля rundll16.exe dll16.dll,MyProc


ganda   (2007-05-28 06:27:00) [11]

Перефразирую вопрос!
Как можно вызвать процедуру(функцию) из 32-bit DLL в 16-bit приложении?!


Наверх

Титульная страница Поиск, карта сайта Написать письмо