我有一個C++程序,它調用Delphi DLL來初始化包含字符的緩衝區。在C++和Delphi之間傳遞PChar/* char
我測試出來的接口,以確保數據正確傳遞:
在C++程序:
char * pMsg = (char*)malloc(3); //allocate buffer
Init(pMsg * char); //Delphi DLL function
在Delphi中DLL:
procedure Init(pMsg:PChar);
var
pHardcodedMsg:PChar;
begin
pHardcodedMsg:= '123';
CopyMemory(pMsg, pHardcodedMsg, Length(pHardcodedMsg));
end;
但,當我嘗試在C++ printf((const char*)pMsg)
, 它顯示m e「123
」後跟一些垃圾字符。
這是爲什麼? 如何成功地將一個char數組放入緩衝區並讓字符串正確打印出來?
感謝。我這樣做,它打印出正確的:pHardcodedMsg:='123'#0; CopyMemory(pMsg,pHardcodedMsg,Length(pHardcodedMsg)+1); – seveleven 2010-10-16 13:31:56
-1代表「Delphi不使用以NULL結尾的字符串」。 Delphi字符串以NULL結尾,並且不需要添加終止0 - 它已經在那裏。您所需要的只是使用4個字符而不是3個。 – kludg 2010-10-16 13:48:19
Delphi字符串不是空終止的(null不會終止字符串)。但是你是對的,因爲字符串和文字在字符串內容之後有一個空值。它可能不是第一個。 – 2010-10-16 16:41:29