Я хочу вызвать функцию C ++ DLL в моем приложении Delphi.
Проблема в том, что я получил нарушение прав доступа.Но не при вызове моей C ++ DLL, а при выходе из функции Delphi, в которой я это делаю.
Сообщение об ошибке (сокращено):
Нарушение доступа в 0x7445c9f1: чтение по адресу 0x00000000.
Мой метод C ++ выглядит так:
extern "C" __stdcall void SetName(LPCTSTR name) {strcpy_s(nameInDll,512,name);};
Мой вызов Delphi выглядит следующим образом:
begin
...
hDll := LoadLibrary('myCpp.dll');
SetName := getprocaddress(hDll, 'SetName');
SetName(pchar(myControl.text)); // <--- exception NOT here
...
end; // <--- exception here
забавно то, что он работает, если я использую усерднозакодированный текст в качестве ввода для вызова DLL выглядит следующим образом:
SetName(pchar('myName'));
РЕДАКТИРОВАТЬ:
Я пропустил определение __ stdcall в моемC ++ DLL.Это было определено в макросе.Я исправил приведенное выше определение метода C ++.
Увидев это и ваши советы, я нашел решение, которое работает:
procedure SetName(s: PChar); stdcall; external 'myCpp.dll';
begin
...
SetName(pchar(myControl.text));
...
end;