///////////////////////////////////////////////////////
//消息头定义
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;
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;不过较常见的应该是内存拷贝~