我的Delphi应用程序正在调用C ++ DLL中的函数,该函数应该返回这样的字符串。
C ++ DLL
__declspec( dllexport ) void sample(char* str1, char* str2)
{
strcpy(str1, "123");
strcpy(str2, "abc");
}
的Delphi
procedure sample(Str1, Str2: pchar); cdecl; external 'cpp.dll';
var
buf1 : Pchar;
buf2 : Pchar;
begin
sample(@buf1, @buf2);
//display buf1 and buf2
//ShowMessage(buf1); //it display random ascii characters
end;
这样做的正确方法是什么?
答案 0 :(得分:5)
您需要为要写入的C ++代码分配内存。例如:
var
buf1, buf2: array [0..255] of Char;
begin
sample(buf1, buf2);
end;
您还应该重新设计接口以接受缓冲区的长度,从而允许DLL代码避免缓冲区溢出。