function GetHostCallerId():PChar;
var
pBuf:PChar;
Ms:PChar;
BS: string;
begin
GetMem(pBuf,100); //要用这个函数。
//我想把'abc'赋值给pBuf,怎么做?即pBuf指向的地址里的内容是'abc'
pBuf:='abc'; //我知道这样是错的。其得到了'abc'的地址。
FreeMem(pBuf); result:=Ms;
end;
var
pBuf:PChar;
Ms:PChar;
BS: string;
begin
GetMem(pBuf,100); //要用这个函数。
//我想把'abc'赋值给pBuf,怎么做?即pBuf指向的地址里的内容是'abc'
pBuf:='abc'; //我知道这样是错的。其得到了'abc'的地址。
FreeMem(pBuf); result:=Ms;
end;
function GetHostCallerId():string;-> or
function GetHostCallerId(pBuf:PChar;nLen:Integer):Boolean;
pBuf:='abc';
这样写是可以的,delphi会自动帮你转换类型。
如果你不放心可以这样写
pBuf:=PChar('abc');我不知道你的Ms指向什么地方,但是我希望你不要用这种方法来返回值,很危险。
...GetMem(result, 100);
strcopy(....
end;但如果沒有特別要求, 還是直接返回 string 為好
Move(PChar('abc'),pBuf,Length('abc')+1);
注意分配的内存要足够!
s := 'abc';
Move(s[1],pBuf^,Length(s)+1);
注意分配的内存要足够!
这样写是可以的,delphi会自动帮你转换类型。
如果你不放心可以这样写
pBuf:=PChar('abc');以上的两种方法,在FreeMem(pBuf);时就会出错的!因为释放的不是GetMem(pBuf,100); 所分配的内存。StrCopy函数还可以用:
Move(PChar('abc'),pBuf,Length('abc')+1);
这两个搞定了,谢谢!