///////////////////////////////////////////////////////
//消息头定义
type
MESSAGE_HEAD = Record
Send:WORD; //发送方的结点号
Receive:WORD; //接收方的结点号
Hostid:WORD; //暂时不用
end;
/////////////////////
///定义相应的指针
type
PMESSAGE_HEAD = ^MESSAGE_HEAD;
procedure myfun()
var pMsg:PChar;
pMsgHead:PMESSAGE_HEAD;
begin //给pMsg分配内存 赋值 pMsgHead:= 111; --->//当然错误, 提示:Incompatible types: 'Integer' and 'ReqAddHost_msg'
pMsgHead:= PChar; -->但是,这里的提示却是: Incompatible types: 'Char' and 'ReqAddHost_msg'
-->我想把指针转换为结构体类型的.请问如何做? end;
//消息头定义
type
MESSAGE_HEAD = Record
Send:WORD; //发送方的结点号
Receive:WORD; //接收方的结点号
Hostid:WORD; //暂时不用
end;
/////////////////////
///定义相应的指针
type
PMESSAGE_HEAD = ^MESSAGE_HEAD;
procedure myfun()
var pMsg:PChar;
pMsgHead:PMESSAGE_HEAD;
begin //给pMsg分配内存 赋值 pMsgHead:= 111; --->//当然错误, 提示:Incompatible types: 'Integer' and 'ReqAddHost_msg'
pMsgHead:= PChar; -->但是,这里的提示却是: Incompatible types: 'Char' and 'ReqAddHost_msg'
-->我想把指针转换为结构体类型的.请问如何做? end;
解决方案 »
- 关于TWebBrowser.Document
- Delphi版人气越来越差了 人都跑哪儿去了?
- 有谁能举例说明一下StringReplace()函数的用法吗?谢谢!在线等,下午2:00结贴。
- 是否只有SocketConnection才能使用负载均衡控件TSimpleObjectBroker
- 我想更好的掌握DELPHI的语言规则,多掌握些语法上的东西,请问各位大虾,那能找到相关的书或者说相关的资料,请多指教!!
- 我是一名新手,怎样让Delphi6编译出的东西在没装Delphi的机器中运行?
- 如何在安装程序中注册用delphi开发的com+(mts)(dll)程序?
- 解决问题必给400分!!!
- 如何获取本机IP地址?
- PS问题:如何理解“CMYK模式的图片文件只能置入与其模式相同的图片。”
- 在向listview中添加一条记录后,第一列有一个checkbox,如何去掉呀!!!!!!!!!
- 如何给QRRichText1动态赋值?
PMESSAGE_HEAD(pMsgHead)^.Receive := ;
type
PMESSAGE_HEAD = ^MESSAGE_HEAD;
MESSAGE_HEAD = Record
Send:WORD; //发送方的结点号
Receive:WORD; //接收方的结点号
Hostid:WORD; //暂时不用
end;
//测试
procedure TForm1.Button1Click(Sender: TObject);
var
p:^Word;
pMsgHead:PMESSAGE_HEAD;
begin
new(p);
p^:=123;
pMsgHead:=PMessage_head(p);//pMsgHead指向p指向的地址
Showmessage(inttostr(PMsgHead.Send));//数据正确;指向的数据阅刚好一样
ShowMessage(inttostr(pmsghead.Receive ));//数据不正确;指向错误内存
end;
//消息头定义
type
MESSAGE_HEAD = Record
Send:WORD; //发送方的结点号
Receive:WORD; //接收方的结点号
Hostid:WORD; //暂时不用
end;
/////////////////////
///定义相应的指针
type
PMESSAGE_HEAD = ^MESSAGE_HEAD;
procedure myfun()
var pMsg:PChar;
pMsgHead:PMESSAGE_HEAD;
begin //分配pMsgHead内存空间 ... //指向pMsgHead
pMsg = @pMsgHead;
end;注意啊,形同 pMsg:=$0011 之类的把地址直接赋值给指针变量的用法C语言可以,Pascal不允许的。
不过可以这样直接指定地址(如果地址不是变化的话)var Ptr: Pointer absolute $0040;
procedure myfun()
var pMsg:PChar;
pMsgHead:PMESSAGE_HEAD;
f:array[0..2] of word;
begin
.......
pmsg:=@f[0];
pMsgHead:= pointer(pmsg);
end;不过较常见的应该是内存拷贝~