Перейти к содержанию

Delphi & C++. Вызов Функций Из Dll.


Рекомендуемые сообщения

Всем привет. У меня тут возникла проблема. Я пишу dll-ку, в которой есть определенный набор API функций(она написана на  С++). Так же есть Delphi приложение, в котором я и собираюсь вызывать функции. 

procedure TForm2.Button1Click(Sender: TObject);   var libHandle:THandle;   Printf:function(text:PChar):Boolean; // Возможно тут ошибка, ибо не PChar, а что то другое.begin   libHandle:= LoadLibrary('MyLib.dll'); // Подгружаем библиотеку   @Printf:= GetProcAddress(libHandle,'lib_Printf');//Получаем ее адрес   Printf('Hello world'); //Вызываем функцию из ее   FreeLibrary(libHandle);// Выгружаемend;
После чего в приложении создается консоль и по идее должна выводиться эта надпись, но вместо этой надписи появляется всякий бред. 

Вот сам код вызываемой функции 

 

 

#define EXPORT extern "C" __declspec (dllexport)EXPORT bool lib_Printf(char* text){CreateConsole(); // Описание ее думаю не нужноprintf("Text : ");printf(text);return true;} 
Результат: 

6bee77f93844.png

В чем проблема? Как вывести изначально задуманный текст(Hello world)?

Надеюсь на помощь, спасибо.

Ссылка на комментарий
Поделиться на другие сайты

В конце прототипа функции stdcall нужно добавить в дельфях. Попробуй, возможно, поможет. Все дело в типе передачи парамеров. stdcall (или thiscall) как раз и поясняют тип передачи параметров для функции.

Ссылка на комментарий
Поделиться на другие сайты

Проблема решена. Решение:

procedure TForm2.Button1Click(Sender: TObject);var libHandle:THandle;Printf:function(text: PAnsiChar): Boolean; stdcall; // Изменил тип на PAnsiChar и добавил stdcall;beginlibHandle:= LoadLibrary('MyDLL.dll');@Printf:= GetProcAddress(libHandle,'lib_Printf');Printf('Hello world');FreeLibrary(libHandle);end;

Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.