用delphi的什么函数可以做到呢?我试了一下用interger()好像不可以的!
解决方案 »
- 怎样在同一台机器上安装turbo delphi和C++ explorer
- 请教WebServices做3层的数据库应用
- 点击按钮显示隐藏按钮。
- 清屏
- 屏幕取词的问题,很困惑!请帮帮忙!!!
- [急急急!!!各位大侠救命!!!]关于dataset只读不可修改的问题???
- 对"精灵窗体"有兴趣的朋友进来聊聊,交流一下... ^_^
- 请教,类似DBGrig的控件显示记录,能否实现某一列的几行记录合并?
- 如何为listview加背景图,并且item要透明?
- 鼠标问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 如何在richtext里面打开一个word文档
- 可用分和信誉分如何增加的啊?
p: ^integer;
a: integer;
begin
a := integer(@p);end;
VC接收函数不能正确读取字符串啊!
就是这样啊,我就是不知道该怎么样传送啊。
怎样把变量的地址边成整形啊?
发送消息的时候传送的必须是整形,指针类型不可以传送啊。
另外,不要看见指针就乱用PChar,Pchar只是字符指针而已。
p: PChar;
s: string;
...
p := 'TEST';
s := IntToHex(integer(p), 8);
Application.MessageBox(PChar(s), 'Address', MB_OK);
TPointerType = (ptString, ptInteger, ptObject);procedure Some(P: Integer; pType: TPointerType);
begin
case pType of
ptString: ShowMessage(PChar(P));
ptInteger: ShowMessage(IntToStr(PInteger(P)^));
ptObject: ShowMessage(TObject(P).ClassName);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
P: PChar;
S: string;
V: Integer;
begin
S := 'abcd';
P := PChar(S);
Some(Integer(P), ptString); V := 10;
P := @V;
Some(Integer(P), ptInteger); P := Pointer(Self);
Some(Integer(P), ptObject);
end;只要是指针,基本可以互为强制转换,不管它是PChar, Pointer, PByte, PInteger指针又可以进行强烈转换成Integer, Cardinal,因为指针其实就是一个32bit的无符号值,即是如此,它就是Integer, Cardinal,Integer虽然的范围在-2G-->2G之间,但一般来说,已经足够表示了。Cardinal就不用说了。最后说一下,需要注意局部变量的生存期,不要在其它地方引用的指针已经过了它的生存期间,不然访问会AV。
var
P: Pointer;
Len: Integer;
begin
Len := Length(S) + 1;
GetMem(P, Len);
try
FillChar(P^, Len, 0);
Move(S[1], P^, Len - 1);
SendMessage(Handle, WM_MyMsg, 0, Integer(P));
finally
FreeMem(P);
end;
end; SendMessage之间,即消息已经发送出去,那就可以FreeMem(P)了,如果你用PostMessage,消息可能还没到达,而你如果FreeMem的话,那消息再到的时候,会AV,所以,如果你使用PostMessage,最好将这个P: Pointer指针先用什么方法保存起来,到最后再Free它。进程外的指针数据访问,我有点忘了,好像可以用GetMem出来的指针来互相访问,如果出错的话,你试试用: GlobalAllocPtr, GlobalFreePtr