这个怎么转换?(50分)

  • 主题发起人 主题发起人 liuyang
  • 开始时间 开始时间
L

liuyang

Unregistered / Unconfirmed
GUEST, unregistred user!
定义了一个PCHAR类型,想转换成POINTER类型。
我在DLL中是这样写buffer:=@bufferpchar的。(bufferpchar是PCHAR,buffer是POINTER)
在DLL中showmessage(pchar(bufferpchar)),显示正常。
但在前端调用showmessage(pchar(buffer))就是乱码。
请问怎么解决?
 
应该在程序中分配空间,你可能在 DLL中分配空间。
 

buffer:=@bufferpchar[0];
 
pchar本来是指向字符串的指针,而POINTER是指针。
在buffer:=@bufferpchar句中不需要取bufferpchar的地址了
直接buffer:=bufferpchar,
然后调用showmessage(pchar(buffer))就不会错了
 
buffer = Pointer(bufferpchar);
 
to 行素
你的我试了,在showmessage(pchar(buffer))是能正常显示,但
把他赋给MEMO1就不行了。比如:
memo3.Lines.Text :=pchar(buffer);显示的是空
如果赋给一个STRING变量在赋值也是空
s:=pchar(buffer);
memo3.Lines.Text:=s;也是空

能否解决,谢谢各位
 
var
a:pchar;
s:string;
b:pointer;
begin
a:='asdf';
pchar(b):=a;
s:=pchar(b);
showmessage(pchar(b));
Memo1.Lines.Text:=pchar(b);
end;
工作正常啊。
 
var
s: string;

s:=string(pchar(buffer));
memo3.Lines.Text:=s; //OK
 
s:=String(pchar(buffer));
//////
 

看清楚代码,不会是空的吧。
 
我估计是因为dll的缘故吧,

dll的地址空间和你的exe的地址空间一样吗?
 
多人接受答案了。
 
后退
顶部