Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

вызов DLL функции   Найти похожие ветки 

 
str9nom   (2007-09-18 22:50) [0]

Пытаюсь вызвать из своего приложения функцию из своей dll, передав ей в качестве параметра PChar.

DLL:

function z(Value: PChar): Boolean; stdcall;
begin
 ShowMessage(Value);
end;  

exports z;


EXE:

type
 Tz = function(Value: PChar): Boolean;

procedure TForm1.Button4Click(Sender: TObject);
var
 MyHandle: THandle;
 MyZ: Tz;
begin
 MyHandle := LoadLibrary(PChar("ProjectDll.dll"));
 @MyZ := GetProcAddress(MyHandle, "z");
 if Assigned(@MyZ) then
 begin
     MyZ(PChar("zzz"));
 end;
   


При попытке вызвать происходит MessageBox с мусором, а потом AV.

Что я забыл?


 
Инс ©   (2007-09-18 22:54) [1]

EXE:

type
Tz = function(Value: PChar): Boolean; stdcall;


 
Юрий Зотов ©   (2007-09-19 00:56) [2]

> str9nom   (18.09.07 22:50)

Зачем использовать stdcall, если не понимаешь, что оно означает и для чего нужно?

Если бы этого слова не было, то все бы работало. А уж если это слово проставлено, то оно должно быть проставлено и в прототипе функции.


 
evvcom ©   (2007-09-19 08:48) [3]

Видимо, мода. В примере ж каком-нить стояло, вот он и поставил, да не везде. Может в примере не разглядел или книжка такая "хорошая" попалась :)


 
Ega23 ©   (2007-09-19 09:14) [4]


> В примере ж каком-нить стояло, вот он и поставил


Угадай, в чьей книжке...   :)


 
evvcom ©   (2007-09-19 09:46) [5]


> Ega23 ©   (19.09.07 09:14) [4]

Слава, богу мне не довелось ее читать, но я много лестных отзывов о ней слышал на этом форуме :)


 
Инс ©   (2007-09-19 10:36) [6]


> Угадай, в чьей книжке...   :)

Э-э-э-э... А у меня два варианта! :)


 
Sairex ©   (2007-10-08 12:12) [7]

Твой код:
function z(Value: PChar): Boolean; stdcall;
begin
ShowMessage(Value);
end;  

exports z;

EXE:

type
Tz = function(Value: PChar): Boolean;

procedure TForm1.Button4Click(Sender: TObject);
var
MyHandle: THandle;
MyZ: Tz;
begin
MyHandle := LoadLibrary(PChar("ProjectDll.dll"));
@MyZ := GetProcAddress(MyHandle, "z");
if Assigned(@MyZ) then
begin
    MyZ(PChar("zzz"));
end;

Тоже самое только написаный мной
DLL:
function z(Value: PChar): Boolean; stdcall;
begin
ShowMessage(Value);
end;  
exports z index 0;

EXE:
type
Tz = function(Value: PChar): Boolean;

procedure TForm1.Button4Click(Sender: TObject);
var  MyHandle: THandle;
      MyZ: Tz;
begin
try
MyHandle := LoadLibrary(PChar("ProjectDll.dll"));
if MyHandle>32 then
begin
@MyZ := GetProcAddress(MyHandle, "z");
if Addr(MyZ)<>nil then    MyZ(PChar("zzz"))
else ShowMessage("Error Get address function");
end else ShowMessage("Error dll not found");
Finnaly
FreeLibrary(MyHandle);
End; // try finnaly

End;
Сравни...


 
Сергей М. ©   (2007-10-08 12:22) [8]


> Sairex ©   (08.10.07 12:12) [7]


В твоем коде та же самая грубая ошибка с использованием соглашения о вызове.


 
Sairex ©   (2007-10-08 12:47) [9]

Упс да забыл о StdCall;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
3-1182679985
Ulugbek
2007-06-24 14:13
2007.10.28
Помогите DBGRID без вертикал скролла


15-1190126099
alex_ant
2007-09-18 18:34
2007.10.28
Поможет ли тут система сопровождения версий?


15-1190522105
Nastena
2007-09-23 08:35
2007.10.28
про Windows Vista


1-1187006465
Dio
2007-08-13 16:01
2007.10.28
Эмулировать прокрутку колеса мыши


15-1191662383
Kostafey
2007-10-06 13:19
2007.10.28
Динамическое формирование C-строки с несколькими 0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский