我试图用一个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