#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 для использования памяти.