Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.042 c
2-1195414150
WFS
2007-11-18 22:29
2007.12.16
Наивный вопрос: как остановить цикл for?


2-1195720465
sia
2007-11-22 11:34
2007.12.16
Все события прекращены?


2-1195657827
webpauk
2007-11-21 18:10
2007.12.16
Наследование


11-1181489135
=BuckLr=
2007-06-10 19:25
2007.12.16
Про DeleteLines


2-1195592375
099999
2007-11-20 23:59
2007.12.16
Какой это цвет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский