Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

Подключить 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 вся ветка

Текущий архив: 2007.12.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
15-1194518134
Grom PE
2007-11-08 13:35
2007.12.16
Прошу помочь с переводом сишного кода эмулятора Adlib


2-1195344069
ЗДЕСЬ_ПОМОЩИ_НЕТ
2007-11-18 03:01
2007.12.16
И НЕ ИЩИ ЕЁ ЗДЕСЬ!!!!!


15-1194973607
Cerberus
2007-11-13 20:06
2007.12.16
Статья или Исходник про архивацию в формате zip.


1-1190805481
Алла_И
2007-09-26 15:18
2007.12.16
Изменить высоту item Listview


2-1195740377
Ученик_2008
2007-11-22 17:06
2007.12.16
Объявление дин. массива в Pascal!