数据模块dm中是连接到中间层的,每个dll都需要一样的数据模块连接到中间层。怎样才能够共用一个数据模块?采用动态运行包是不是需要在dll的每个显示页面内创建数据模块dm?请高手帮忙!!

解决方案 »

  1.   

    跟我现在做的方式完全一样.
    你的DLL应该返回一个对象(我现在返回的是Form),在这个对象的类的定义中加一个dm.示例
    数据模块
    TMyDataModule=class(TDataModule)
    end;DLLTMyForm=class(TForm)
      dm:TDataModule;
    end;function CreateAForm(AppHandle:THandel;DataModule:TDataModule):TForm;stdcall;
    begin
      Application.Handle:=AppHandle;
      Result:=TMyForm.Create(nil);
      (Result as TMyForm).dm:=DataModule;
    end;这样你先在主程序里把Dm生成好,再调用动态库创建对象时,把dm作为参数传进去.所有的DLL就可以共用这个dm了.
      

  2.   

    To  Cipherliu(孤鹰):
      还有一个小问题,在DLL的主FORM的PUBLIC中声明了DM,在DLL的其余FORM中不能直接应用吗?是不是也要以DM作为参数传递?
      

  3.   

    建议你不要在DLLForm中直接用主Form的DM.
    最好是在一个地方创建,其它地方都是引用.这样才能达到共用效果