惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
Jina AI
Jina AI
雷峰网
雷峰网
博客园_首页
WordPress大学
WordPress大学
博客园 - 司徒正美
爱范儿
爱范儿
博客园 - 聂微东
IT之家
IT之家
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
博客园 - Franky
V
V2EX
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志

博客园 - 周黔

delphi firemonkey 12.3 动态绑定TFDMemTable到TStringGrid delphian firemonkey. android:exported 错误 RAD Studio 12 Delphi 12 实现手机无线wifi调试 (巧用Android Studio 2024 连WIFI) delphi 11 HMACSha512 Android Studio 2024 不需要三方插件,直接wifi 开发调试,真方便 CEF4Delphi(DELPHI Google Chrome 浏览器封装) 折腾 (2)--打开一个网页 CEF4Delphi(DELPHI Google Chrome 浏览器封装) 折腾 (1)--安装 Delphi WINAPI 任意拖动移动控件 DELPHI 调用标准C接口DLL char *value Apache NetBeans IDE 12.3 双击无反应怪事 [转]Regions and Clipping in GDI+ delphi 10.4 JSON 建立数组示例 delphi 10.3实现TNetHTTPClient 异步 POST 另类实现返回附加标记及Unicode 编码与解码 \u - 周黔 小程序开发笔记1 用户中心 - 博客园 delphi 跨版本DLL调用嵌入窗体实现 DELPHI GDI + TGPFont UnitPixel 问题解决 delphi DLL image 动态绘图 句柄处理 delphi 每英寸相素点取值偏差
Delphi DLL 消息循环 Synchronize SendMessage PostMessage
周黔 · 2020-03-12 · via 博客园 - 周黔
procedure DllMain(Reason: Integer); register;
begin
   case reason of

    DLL_PROCESS_ATTACH:   //整个DLL的初始化代码
    begin
     // library enter code
     SaveApplication := Application;//调试发现装载时没执行此分支. 所以在初始化代码处显示调用.
     DLLScreen := Screen;

Application.Initialize; if Application.Handle = 0 then begin Application.CreateHandle; end; Application.Run; // dm:=TDM.Create(Application); end; DLL_PROCESS_DETACH: //整个DLL的善後程序 begin b_Terminated:=True; Application := SaveApplication; Screen:=DLLScreen; // library exit code // Application := DLLApp; // Screen := DLLScr; CoUninitialize; //dm:=TDM.Create(Application); end; DLL_THREAD_ATTACH: //当主叫端开始一个Thread时 ; DLL_THREAD_DETACH: //当主叫端终止一个Thread时 ; end; end; begin CoInitialize(nil); DllMain(DLL_PROCESS_ATTACH); DLLPROC := @DllMain; //dll入口函数.调试发现是在释放dll时执行DLL_PROCESS_DETACH分支. end.

在 DLL 需要自己消息循环时,Application.Handle 不可为0,如果为0,如果为0,则  Synchronize  同步  SendMessage PostMessage 等均有可能不可用
而通过
       Application.Initialize;
      if Application.Handle = 0 then
        begin
            Application.CreateHandle;
        end;
      Application.Run;
代码,则可实现delphi DLL中自己的消息循环