偶用delphi写了一个包含着一个窗体的dll
编写过程如下
      1在dll的单元中写了一个显示窗体的过程:
     procedure showWindows();stdcall
      begin
        form1:=Tform1.create(nil);
        form1.ShowModal;
        form1.free;
       end;
      2然后在Exports部分申明了这个过程
  然后在VB中调用这个dll:
    1在通用部分先声明:private Declare Function showWindows Lib "aa.dll" ()
    2然后在Button的click事件里调用这个过程
    结果:当运行起来后单击button 显示窗体 但是当我关闭该窗体的时候 就有个dll约定错误 
   各位兄弟 :这是怎么回事呢?
        

解决方案 »

  1.   

    form1.free;
    form1 := nil;
      

  2.   

    procedure showWindows();stdcall
          begin
            form1:=Tform1.create(nil);
            try
              form1.ShowModal;
            finally
              FreeAndNil(form1);
            end
          end;
      

  3.   

    不行啊 楼上的各位兄弟们   偶刚才试了试 毛病依旧啊!!!!为什么要form1:=nil 能给偶说说么? 期待中......................
      

  4.   

    可以试一下,先判断ModalResult的值再Free窗体。
      

  5.   

    试试 procedure showWindows();stdcall;export;
      

  6.   

    谢谢各位,问题解决了,是因为VB不熟,申明的这句话private Declare Function showWindows Lib "aa.dll" ()不应该是Function,而应该是Sub。
    还有一个问题,为什么dll中一定要Free窗体。如果不Free窗体,在delphi中调用不会出错,在vb中调用这个dll就会出错。