Visual c++ + Lazarus + Dll

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Visual c++ + Lazarus + Dll

Сообщение jhonyxakep » 30.06.2011 17:35:20

Экспортирую в Лазарусе функцию:

Код: Выделить всё
function PlayerConnect(id:integer):integer; export; 
...
function PlayerConnect(id:integer):integer;
begin
   Showmessage(inttostr(id));
end;


Импортирую эту-же функцию в си:

Код: Выделить всё
int (*PlayerConnect)(int);
...
(FARPROC &)PlayerConnect = GetProcAddress(hLib, "PlayerConnect");


Вызываю:

PlayerConnect(12);

В результате ShowMessage выписывает 0

Так происходит с любым значением в функции. Насколько я понимаю, тут имеет место несовместимость типов... Но до этого подобный код идеально работал. :shock:

В чем проблема?
Аватара пользователя
jhonyxakep
новенький
 
Сообщения: 24
Зарегистрирован: 23.08.2010 14:45:35

Re: Visual c++ + Lazarus + Dll

Сообщение v-t-l » 30.06.2011 18:15:42

Наверно, все дело в calling conventions. Не знаю, что такое сишное FARPROC, но попробуйте в паскалевском объявлении явно указать cdecl или stdcall.
Последний раз редактировалось v-t-l 02.07.2011 10:34:19, всего редактировалось 1 раз.
v-t-l
энтузиаст
 
Сообщения: 741
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Visual c++ + Lazarus + Dll

Сообщение jhonyxakep » 01.07.2011 01:38:14

cdecl
Супер! А я даже и не предполагал о существовании этого. :o
Аватара пользователя
jhonyxakep
новенький
 
Сообщения: 24
Зарегистрирован: 23.08.2010 14:45:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

Рейтинг@Mail.ru