在DLL中动态创建了一个Form
procedure ShowMyMsg(msg string);
var
  f :TMyForm;
begin
 f := TMyForm(Application.FindComponent('MYFORM'));
 if f = nil then
 begin
   f := TMyForm.Create(Application);
   f.name := 'MYFORM';
 end;
 f.Label1.Caption := msg;
 ....目的是重复使用f,而不必每次创建,在程序退出时由Application负责销毁f。
该过程在使用动态调用DLL时没有问题,但是静态使用DLL就出现调用OS函数错的提示

解决方案 »

  1.   

    静态使用DLL时在主程序退出后提示错误
      

  2.   

    f := TMyForm.Create(Application);
    改成
    f := TMyForm.Create(nil);看看
    动态释放
      

  3.   

    动态释放可以的,但是我想更简单,让f由应用来释放DLL销毁前,把它释放掉。
      

  4.   

    忘记在哪里看到,说DLL创建的对象,不能由外部调用程序释放。否则出错。
      

  5.   

    有问题吧~~~
    EXE的APP和DLL的APP是两个东西!!EXE的APP不会释放DLL的对象的~~
    所以还是要在DLL结束的时候自己释放!或者你就静态调用DLL函数,这样或学还可以!
      

  6.   

    DLL退出的时候是不是也有个释放内存的过程,象App的Destroy一样?