Главная страница
    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.044 c
15-1195316595
guav
2007-11-17 19:23
2007.12.16
Быстрая сортировка :-)


2-1195595872
azl
2007-11-21 00:57
2007.12.16
Table1.Filter


2-1195649367
{ент
2007-11-21 15:49
2007.12.16
List box


3-1187018188
kirik
2007-08-13 19:16
2007.12.16
работа с FoxPro базами (dbf) через BDE. Проблема структуры.


15-1195408382
Evanescence
2007-11-18 20:53
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский