我在DLL入口汉书中这样创建一个对象不可以么?为什么总是出错?呼唤高手!!
var
  DLLApp: TApplication;
  DLLScr: TScreen;procedure OnDLLLoad(Reason: Integer);
begin
  case Reason of
    DLL_PROCESS_ATTACH:
    begin
      DLLApp := Application;
      DLLScr := Screen;
    //在DLL启动的时候创建数据模块对象。
      if DM=nil then
        DM := TDM.Create(Application);
    end;
    DLL_PROCESS_DETACH:
    begin
      Application := DLLApp;
      Screen := DLLScr;
    //在DLL启动的时候创建释放该对象。
      if DM<>nil then
        FreeAndNil(DM);
    end;
  end;  
end;procedure ConnDatabase(ADOC:TADOConnection);
begin
  DM.ADOC := ADOC;
end;exports
  ConnDatabase;begin
  DLLProc := @OnDLLLoad;
  OnDLLLoad(DLL_PROCESS_ATTACH);end.
在动态连接库调用时退出程序总会有异常触发!

解决方案 »

  1.   

    1.在你的DLL工程文件的begin...End.中保存Application对象,如DllApp := Application; //这里的Application是DLL的Application2.在你输出的函数的参数中增加一个参数,类型为TApplication(如MainApp: TApplication),该参数应该传入主调程序(调用DLL的exe)的Application对象3.在你输出的函数中用传入的Application对象替代Dll的Application对象,如Application := MainApp; //MainApp是主调程序的Application4.在你输出的函数中检查你的数据模块是否已创建,如果没有,就创建。如果它的Owner指定为Application,就不需要自己释放,否则要自己做5.在你的Detach方法中(即你的例子中的OnDLLLoad的DLL_PROCESS_DETACH部分)恢复Dll的原Application对象,如Application := DllApp; //DllApp是DLL原来的Application6.应该行了PS:实际上DLL的Application是nil,你跟踪一下看看。
    PPS:你的OnDLLLoad最好加上register指示字