Вызов Delphi DLL из C CLI со многими параметрами

#delphi #c -cli #delphi-2010

#delphi #c -cli #delphi-2010

Вопрос:

У меня есть встроенная DLL Delphi 2010 с двумя методами:

 function Foo1(a, b: Integer):PChar; export; stdcall;
function Foo2(a, b, c:Integer):PChar; export; stdcall;

exports Foo1, Foo2;
  

Каждый из них возвращает Result := PChar('Test') .

Мой код C CLI

в заголовке

 typedef const wchar_t* (*pFUNC1)(int a, int b);
pFUNC1 TestFoo1;

typedef const wchar_t* (*pFUNC2)(int a, int b, int c);
pFUNC2 TestFoo2;
  

Инициализируйте с помощью LoadLibrary GetProcAddress функций и .
Использование: TestFoo1(0,0) и TestFoo2(0,0,0) ;

Оба работают в режиме выпуска.
Но в режиме отладки Foo2 прерывается.

Пожалуйста, сообщите, что не так.

Ответ №1:

Скорее всего, у вас несоответствие соглашению о вызовах. Измените stdcall в Delphi на cdecl , чтобы он соответствовал вашему коду C / CLI.

Кроме того, вам нужно быть осторожным с временем жизни ваших строк, если вы когда-либо попытаетесь вернуть значение из DLL, которое не является литералом, хранящимся в памяти только для чтения в сегменте данных. Но это не проблема здесь, потому PChar('Test') что имеет тот же срок службы, что и DLL.

Комментарии:

1. бинго! это работает. Я использую StrAlloc, StrPCopy, StrDispose для использования памяти.