На предыдущем форуме данная тема затрагивалась. Но возник вопрос: при обращении к функции находящейся в 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 или что-то около.
Delphi 6. Вызов DLL, написанной на C++.
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
1) я бы в Ц использовал тип данных long и объявлял бы функцию так:
extern "C" long WINAPI fnSimpleDLL(long a);
2) в Delphi указывал бы способ вызова:
TFN = function(a:longint): longint; stdcall;
extern "C" long WINAPI fnSimpleDLL(long a);
2) в Delphi указывал бы способ вызова:
TFN = function(a:longint): longint; stdcall;
в С++:
#define STDEXPORT extern "C" __declspec(dllexport)
STDEXPORT int __stdcall fnSimpleDLL(int a);
в Delphi:
function fnSimpleDLL(Integer a): Integer; stdcall; external 'MyLib.dll';
#define STDEXPORT extern "C" __declspec(dllexport)
STDEXPORT int __stdcall fnSimpleDLL(int a);
в Delphi:
function fnSimpleDLL(Integer a): Integer; stdcall; external 'MyLib.dll';
При использовании stdcall и статическом вызове программа просто закрывается, при динамическом вызове, сообщение: "Access violation at address 00000000/ Read address 00000000".
В любом из предложенных вариантов.
В любом из предложенных вариантов.