Страница 1 из 1

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

Добавлено: 21 апр 2004, 12:32
AlexL
На предыдущем форуме данная тема затрагивалась. Но возник вопрос: при обращении к функции находящейся в 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 или что-то около.

Добавлено: 21 апр 2004, 13:22
AiK
1) я бы в Ц использовал тип данных long и объявлял бы функцию так:

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

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

TFN = function(a:longint): longint; stdcall;

Добавлено: 21 апр 2004, 17:12
Eugie
в С++:

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

в Delphi:
function fnSimpleDLL(Integer a): Integer; stdcall; external 'MyLib.dll';

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