我在DLL里封装了FORM窗体,
在主程序运行的时候,调用了DLL,并SHOW出了DLL窗体,
..........
..........
..........
LoadRegComForm(nil,'Frm_RegCom','RegComDLL');   //调用DLL并SHOW出窗体
  if FindWindow('TFrm_RegCom', nil)<>0 then
  begin
    SendMessage(FindWindow('TFrm_RegCom', nil), WM_CLOSE, 0, 0);
  end; 
这样根本关不了,因为执行了LoadRegComForm(nil,'Frm_RegCom','RegComDLL');后.窗体还显示的,没关闭之前下面的语句是不执行的.我在DLL里面,SHOW出窗体之后,Sleep(500)后,再CLOSE(Frm_RegCom),也不成功,应该怎么解决呢?

解决方案 »

  1.   

    让DLL返回一个指针,并对指针是否为NULL进行判断。
      

  2.   

    参考两个方法
    1:findwindow,找到要关闭的窗体,对他进行处理
    2:发消息,其实也可能用到findwindow,找到句柄,然后发消息给句柄,在dll窗体中写接收消息函数,接收到关闭消息时,close
      

  3.   


    LoadRegComForm(nil,'Frm_RegCom','RegComDLL');  之后
    是无法执行下面的代码..
    你怎么发消息,,,,
    我不是发了消息吗,没效果啊,根本没执行,,窗体还还SHOW状态..
      

  4.   

    FindWindow(nil,'窗体caption')试试,能不能找到句柄另外,可以自定义一个消息,不用系统消息,dll窗体中写接收函数
      

  5.   

    找军柄谁不会啊,,,
    楼上没明白我的意思.  在DLL中如果窗体是 ShowModal ,
    LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); 
    之后的代码是不执行的,还找什么句柄..如果DLL中窗体是SHOW 出来的而非模态窗体,是可以执行
    LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); 下面的代码,但问题是...太快了,DLL中的窗体一闪而过,根本还没来得急显示出窗体中的东西时就已经执行了下面的代码...  加上SLEEP(1000) 后,也一样,窗体象假死了一样,,还是没看清楚里面的东西.....要解决这个问题,主要是怎么来过渡显示 DLL 窗体的问题,,,让他能时时看得见..
      

  6.   

    不是发不发消息的问题,现在我解决了,关闭DLL窗体的问题..
    但是窗体SHOW出来后, 在DLL窗体里的代码感觉没执行, 我跟踪了代码其实是执行了的,,但是窗体好象是假死了一样..
      

  7.   

    我的理解是楼主想调用DLL显示窗体,然后0.5秒后自动关闭,是这样吗?
    如果是这样,在DLL中处理如下:
    加一个Timer,设为500,事件就是关闭程序,在FormCreate时启动定时器,这样0.5秒后DLL窗体必然会关闭
      

  8.   

    你的LoadRegComForm是自己寫的吧,可能是這裡的問題,可以在這裡看看。
      

  9.   

    也就是說,如果用死循環,LoadRegComForm沒有返回,是執行不了LoadRegComForm下面的代碼的.