2011-10-17 16 views
7

ho Delphi 2010 costruito DLL con due metodi:chiamata Delphi DLL da C++ CLI con molti parametri

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

exports Foo1, Foo2; 

Ognuno di loro ritorna Result := PChar('Test').

My C++ \ CLI codice

nell'intestazione

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

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

inizializzazione da LoadLibrary e GetProcAddress funzioni. Uso: TestFoo1(0,0) e TestFoo2(0,0,0);

Entrambi funzionano in modalità di rilascio.
Ma in modalità Debug Foo2 viene interrotto.

Si prega di indicare cosa non va.

risposta

4

Molto probabilmente si ha una mancata corrispondenza delle convenzioni di chiamata. Cambiare stdcall in Delphi a cdecl in modo che corrisponda al codice C++/CLI.

Come parte, è necessario fare attenzione con il ciclo di vita delle stringhe se si tenta di restituire un valore dalla DLL che non è un valore letterale memorizzato nella memoria di sola lettura nel segmento dati. Ma non è questo il problema perché PChar('Test') ha la stessa durata della DLL.

+0

bingo! Funziona. Uso StrAlloc, StrPCopy, StrDispose per scopi di utilizzo della memoria. – RredCat

Problemi correlati