我試圖用一個C++ DLL從一個本地程序。我下面的虛方法的情況作爲解釋here德爾福PChar類型C++爲const char *
比方說我的C++函數簽名的形式
int Setup(const char* szIp, const char* szPort);
和相應的德爾福簽名
function Setup(ip, port: PChar):Integer: virtual; cdecl; abstract;
而且某處從德爾福計劃我可以致電
pObj.Setup('192.168.1.100', '97777');
c ontrol進入dll,但szIp和szPort形式參數只接收從delphi程序傳過來的ip和端口的第一個字符。
據我所知,它與空在delphi正確終止字符串做。所以我也嘗試了以下。
var
pzIp, pzPort: PChar;
szIp, szPort: string;
begin
szIp := '192.168.1.2';
szPort := '9777';
//initilize memory for pchar vars
GetMem(pzIp, Length(szIp)+1);
GetMem(pzPort, Length(szPort)+1);
//null terminate the strings
pzIp[Length(szIp)+1] := #0;
pzPort[Length(szPort)+1] := #0;
//copy strings to pchar
StrPCopy(pzIp, szIp);
StrPCopy(pzPort, szPort);
end.
這也不奏效。當我Writeln
pzIp
和pzPort
我得到奇怪的結果。
忘了告訴,從C++ DLL的所有成員函數編譯__stdcall
並遠銷正確
感謝您的更詳細的解釋:我的回答是一個很快的想法,證明是正確的,但我建議這是答案被接受。 – IanH 2009-09-09 12:01:26
感謝@Deltics,工作。雖然需要進行一些小改動,但是需要進行編譯以使delphi程序編譯爲 pObj.Setup(PAnsiChar(sIPAddress),PAnsiChar(sPort)); 特別感謝@IanH – rptony 2009-09-09 12:57:46