Delphi 6. Вызов DLL, написанной на C++.

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
AlexL
Сообщения: 2
Зарегистрирован: 21 апр 2004, 11:54

На предыдущем форуме данная тема затрагивалась. Но возник вопрос: при обращении к функции находящейся в DLL написанной на С++, которая не имеет параметров все работает, но если функция имеет параметр, то она его не принимает
-- в С++ -- (*.h)
#define SIMPLEDLL_API extern "C" __declspec(dllexport)
SIMPLEDLL_API int fnSimpleDLL(int a);

(*.cpp)
int fnSimpleDLL(int a)
{
Return a++;
}


-- в Delphi --
TFN = function(a:integer): Integer;
...
Inst := LoadLibrary('SimpleDLL.dll');
@fn := GetProcAddress(Inst, 'fnSimpleDLL');
b:=fn(1);
Получаем B=12345 или что-то около.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

1) я бы в Ц использовал тип данных long и объявлял бы функцию так:

extern "C" long WINAPI fnSimpleDLL(long a);

2) в Delphi указывал бы способ вызова:

TFN = function(a:longint): longint; stdcall;
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

в С++:

#define STDEXPORT extern "C" __declspec(dllexport)
STDEXPORT int __stdcall fnSimpleDLL(int a);

в Delphi:
function fnSimpleDLL(Integer a): Integer; stdcall; external 'MyLib.dll';
AlexL
Сообщения: 2
Зарегистрирован: 21 апр 2004, 11:54

При использовании stdcall и статическом вызове программа просто закрывается, при динамическом вызове, сообщение: "Access violation at address 00000000/ Read address 00000000".
В любом из предложенных вариантов.
Ответить