我在一个应用程序中需要调用一个DLL中的CHILDMDI窗口,但是总是出错,其实我只要它能SHOW就行,我在DLL中的过程这样写的:
procedure showform(Apphandle:THandle);
var
  form1 :Tform1;
begin
  form1 :=Tform1.creat(Application);
  try
    form1.show;(或者showmodal)
  finally
    form1.free;        
  end;
end;调用时前面已经正常声明过了,调用的地方用showform(Application.Handle),

解决方案 »

  1.   

    但是总出错,我的调用的窗体是MDI类型的窗口
      

  2.   

    在Create里面的参数应该是TComponent,而你是句俩,而且当你有show后,窗体马上就free了,肯定显示不出来。
      

  3.   

    不是FREE掉了,我跟踪了一下,在create 时就出错了
      

  4.   

    应该是MDI Forms 与MDI Child的关系问题,因为MDI Child是通过DLL来建立的,所以它不知道它所属的MDI Forms是那个,因此在Create时就会出错了.
      

  5.   

    http://www.csdn.net/expert/Topic/358/358421.shtm
    http://www.csdn.net/expert/Topic/344/344112.shtm
      

  6.   

    to: fans2000(fans2000  我也知道是此原因,但怎么解决????sos !sos
      

  7.   

    这个问题我问过,简单地带包编译就可以了。如果你使用了ADO组件,记得在主程序的
      Application.Initialize;后面加上
      CoInitialize(Nil);
      

  8.   

    to xyc189:
    你说的那个帖子的方法我试过,退出时会出错
      

  9.   

    我见过一个例子:
    procedure showform(Apphandle:THandle);
    var
      form1 :Tform1;
    begin
      Application.Handle := Apphandle;
      form1 :=Tform1.create(Application);
      try
        form1.show;(或者showmodal)
      finally
        form1.free;        
      end;
    end;
      

  10.   

    带包编译后就不用传Application了。