2011-10-17 16 views
7

Ben Delphi 2010 iki yöntemle DLL inşa vardır:Çağrı Delphi DLL

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

exports Foo1, Foo2; 

Her biri Result := PChar('Test') döndürür.

Benim LoadLibrary ve GetProcAddress fonksiyonları tarafından başlığındaki

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

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

başlatma C++ \ CLI kod

. Kullanım: TestFoo1(0,0) ve TestFoo2(0,0,0);

Her ikisi de Çıkış modunda çalışır.
Ancak Hata Ayıklama modunda Foo2 iptal ediliyor.

Lütfen sorunun ne olduğunu bildirin.

cevap

4

Büyük olasılıkla kongre uyumsuzluğu çağırdınız. Delphi'deki stdcall'u, C++/CLI kodunuzu eşleştirmek için cdecl olarak değiştirin.

Bir kenara baktığınızda, veri dizisindeki salt okunur bellekte depolanmış bir hazır olmayan DLL'den bir değer döndürme girişiminde bulunursanız, dizelerinizin kullanım ömrüne dikkat etmeniz gerekir. Ancak sorun bu değil çünkü PChar('Test') DLL ile aynı ömre sahiptir.

+0

bingo! işe yarıyor. Hafıza kullanım amacı için StrAlloc, StrPCopy, StrDispose kullanıyorum. – RredCat