用delphi的什么函数可以做到呢?我试了一下用interger()好像不可以的!

解决方案 »

  1.   

    var
     p: ^integer;
     a: integer;
    begin
     a := integer(@p);end;
      

  2.   

    好象不可以啊?我这个函数是给VC发送消息的。
    VC接收函数不能正确读取字符串啊!
      

  3.   

    TO:foxnt(吴剑明★天马梦想) 
    就是这样啊,我就是不知道该怎么样传送啊。
    怎样把变量的地址边成整形啊?
    发送消息的时候传送的必须是整形,指针类型不可以传送啊。
      

  4.   

    我上面不是给了代码你么,你看了没有。
    另外,不要看见指针就乱用PChar,Pchar只是字符指针而已。
      

  5.   

    简单啊。
    p: PChar;
    s: string;
    ...
    p := 'TEST';
    s := IntToHex(integer(p), 8);
    Application.MessageBox(PChar(s), 'Address', MB_OK);
      

  6.   

    type
      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。
      

  7.   

    你是发消息给一方使用的?我以前试的时候,好像是变量不行,好像是需要用分配指针来才中。如发字符串消息给另外进程:procedure TList.SendMsg(Handle: THandle; const S: string); 
    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