2011-10-17 9 views
7

mam Delphi 2010 DLL zbudowany z dwóch metod:połączeń Delphi DLL z C++ CLI z wielu parametrów

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

exports Foo1, Foo2; 

Każdy z nich zwraca Result := PChar('Test').

My C++ \ CLI kod

w nagłówku

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

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

Initialize przez LoadLibrary i GetProcAddress funkcji. Użycie: TestFoo1(0,0) i TestFoo2(0,0,0);

Oba działają w trybie zwolnienia.
Ale w trybie debugowania Foo2 jest przerywane.

Proszę poinformować, co jest nie tak.

Odpowiedz

4

Najprawdopodobniej masz niedopasowanie konwencji wywoływania. Zmień stdcall w Delphi na cdecl, aby pasowało do twojego kodu C++/CLI.

Na marginesie, należy zachować ostrożność przy życiu ciągów, jeśli kiedykolwiek spróbujesz zwrócić wartość z biblioteki DLL, która nie jest literałem przechowywanym w pamięci tylko do odczytu w segmencie danych. Ale to nie problem, ponieważ PChar('Test') ma takie samo życie jak DLL.

+0

bingo! to działa. Używam StrAlloc, StrPCopy, StrDispose do celów użycia pamięci. – RredCat

Powiązane problemy