zoukankan      html  css  js  c++  java
  • TProcedure,TMethod,TNotifyEvent,TWndMethod的区别,并模拟点击按钮后发生的动作

    忽然发现TProcedure和TNotifEvent的区别还挺大的:

    procedure TForm1.Button2Click(Sender: TObject);
    begin
        ShowMessage(IntToStr(SizeOf(TProcedure)));   // 4字节
        // ShowMessage(IntToStr(SizeOf(function)));   // 编译通不过
        ShowMessage(IntToStr(SizeOf(TNotifyEvent))); // 8字节
        ShowMessage(IntToStr(SizeOf(TMouseEvent)));  // 8字节
        ShowMessage(IntToStr(SizeOf(TWndMethod)));   // 8字节
    end;

    模拟点击按钮后发生的动作:

    ----------------------------------------------------------------------------------

    其实各种TNotifyEvent,实际上就是TMethod,可随时做强制转换,然后测试TMethod:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(SizeOf(TMethod))); // 8字节
    end;
    
    // 其声明位于System.pas中
    TMethod = record
      Code, Data: Pointer;
    end;

    ----------------------------------------------------------------------------------

    TWndMethod是MakeObjectInstance所用的参数,该函数也是采用了前面类似的方法,不过不同的是,由于这些转换调用是长期的,所以那些动态生成的代码被放到了标识为可执行的动态空间中了,所以在 Win2003 的 DEP 下仍然可以正常工作:

    function MakeObjectInstance(Method: TWndMethod): Pointer; 

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(SizeOf(TWndMethod))); // 8字节
    end;
  • 相关阅读:
    Bootstrap
    Asp.Net母版页的相关知识
    连接Access数据库的连接字符串
    登录界面更换验证码图片
    .NET中string与StringBuilder在字符串拼接功能上的比较
    Asp.Net(C#)使用oleDbConnection 连接Excel
    非常规方法实现添加合并列
    ASP.Net页面间变量值传递的方法
    eclipse配置class注释模板
    spring中web.xml指定配置文件
  • 原文地址:https://www.cnblogs.com/findumars/p/4841610.html
Copyright © 2011-2022 走看看