1.
对于这样的定义
buffer: array[0..255] of char;在function中使用pointer(buffer),会提示非法类型转换但若使用
zeromemory(buffer, 255)就不会, 而zeromemory的原型是ZeroMemory(destination: pointer <----!!!!!! ....)2.对于类定义 TMyClass = class
 private
   function abc: integer;
 public
   procedure foo;
 end; procedure foo;
 type 
   TP = function: integer of object;
 var
   p: TP;
 begin
   move(p, publicfoo, sizeof(tp));  
   //publicfoo是一全局变量, 居然可以用这样的方法把类的private部分拷贝出去
 end;这应该是一种不好的做法,delphi对函数指针控制的还比较严格。没有那个of object就无法执行,想听听高手们的意见和相关心得 

解决方案 »

  1.   

    平時是這樣操作
    p := pointer(@buffer[0]);2, 你對指針的內存區域進行拷貝,這個誰也阻止不了啊!
     而且, 就是將 "这样的方法把类的private部分拷贝出去"
    才能保證實例的完整啊
    你能不能訪問到, 是另外一回事!
      

  2.   

    但若使用
    zeromemory(buffer, 255)就不会,//怎么可能??  我这儿无法通过, D6应该添加@符号才对
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Buffer: array [0..10] of Char;
      a: Pointer;
    begin
      a := Pointer(@Buffer);
      ZeroMemory(@Buffer, SizeOf(Buffer));
    end;
      

  3.   

    var buffer: array[0..255] of char;zeromemory(buffer, 255)可以吗?zeromemory(@buffer, 255)
    没有那个of object就不是对象的方法指针,对象的方法指针当然不能和普通指针混用
    TP = function: integer of object;(还隐含了self pointer)
    Sizeof(TP)=8
    TP = function: integer ;
    Sizeof(TP)=4
      

  4.   

    還有個問題, 你這樣
    >>move(p, publicfoo, sizeof(tp));  
    應該有問題的!不是說會出錯,
      

  5.   

    很感谢各位高手的指点,对于第一个问题很抱歉,回家试了试的确不行,可今天在公司里的时候确实是亲眼看见通过的,我总不至于哗众取宠吧,呵呵明天去公司看看是怎么一回事再说另外对于第二个问题
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure showit;
      public
        { Public declarations }
      end;  pubproc = procedure;
    var
      Form1: TForm1;
      foo: procedure;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    type
      tp = procedure of object;
    var
      p: tp;
    begin
      p := showit;
      move(p, foo, sizeof(pubproc));//不论是用pubproc还是tp,foo都可以正常显示  
      foo;
    end;procedure TForm1.showit;
    begin
      showmessage('abc');
    end;
      

  6.   

    你在试一下.....
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        var i:integer;
        procedure showit;
      public
        { Public declarations }
      end;  pubproc = procedure;
    var
      Form1: TForm1;
      foo: procedure;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    type
      tp = procedure of object;
    var
      p: tp;
    begin
      p := showit;
      move(p, foo, sizeof(pubproc));//不论是用pubproc还是tp,foo都可以正常显示  
      foo;
    end;procedure TForm1.showit;
    begin
       i:=200;
      showmessage('abc');
    end;