Вызовите Delphi DLL из C ++ \ CLI со многими параметрами - PullRequest
7 голосов
/ 17 октября 2011

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

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 Ответ

4 голосов
/ 17 октября 2011

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

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

...