2011-10-17 37 views
7

Tôi có Delphi 2010 xây dựng DLL với hai phương pháp:Gọi Delphi DLL từ C++ CLI với nhiều thông số

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

exports Foo1, Foo2; 

Mỗi trong số họ trả Result := PChar('Test').

My C++ \ CLI đang

trong tiêu đề

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 bởi LoadLibraryGetProcAddress chức năng. Cách sử dụng: TestFoo1(0,0)TestFoo2(0,0,0);

Cả hai đều hoạt động ở chế độ Phát hành.
Nhưng trong chế độ Gỡ lỗi, Foo2 đang bị hủy.

Vui lòng cho biết điều gì là sai.

Trả lời

4

Rất có thể bạn đã gọi quy ước không khớp. Thay đổi số stdcall trong Delphi thành cdecl để khớp với mã C++/CLI của bạn. Ngoài ra, bạn sẽ cần phải cẩn thận với vòng đời của chuỗi nếu bạn cố gắng trả về một giá trị từ DLL không phải là một chữ được lưu trữ trong bộ nhớ chỉ đọc trong phân đoạn dữ liệu. Nhưng đó không phải là vấn đề ở đây vì PChar('Test') có cùng tuổi thọ với DLL.

+0

bingo! nó hoạt động. Tôi sử dụng StrAlloc, StrPCopy, StrDispose cho mục đích sử dụng bộ nhớ. – RredCat

Các vấn đề liên quan