zoukankan      html  css  js  c++  java
  • Delphi DLL 消息循环 Synchronize SendMessage PostMessage

    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中自己的消息循环

     

  • 相关阅读:
    【LeetCode-动态规划】编辑距离
    【LeetCode-栈】计算器
    【LeetCode-栈】字符串解码
    【LeetCode-数组】缺失的第一个正数
    【LeetCode-查找】寻找重复数
    【LeetCode-堆】丑数
    【LeetCode-堆】数据流中的第K大元素
    【LeetCode-排序】根据身高重建队列
    立项与启动
    JS中match方法探究
  • 原文地址:https://www.cnblogs.com/zhqian/p/12467828.html
Copyright © 2011-2022 走看看