///////////////////////////////////////////////////////
//消息头定义
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;

解决方案 »

  1.   

    PMESSAGE_HEAD(pMsgHead)^.Send := ;
    PMESSAGE_HEAD(pMsgHead)^.Receive := ;
      

  2.   

    //定义
    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;
      

  3.   

    啊,怎么没有知道@是干什么用的吗?///////////////////////////////////////////////////////
    //消息头定义
    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;
      

  4.   

    没有测试:
    procedure myfun()
    var pMsg:PChar;
        pMsgHead:PMESSAGE_HEAD;
       f:array[0..2] of word;
    begin
    .......
      pmsg:=@f[0];
      pMsgHead:= pointer(pmsg); 
    end;不过较常见的应该是内存拷贝~