====================================================1。比较多讲到的就是说像TForm一样的使用,但是说道的通常都只是在一个函数中create,然后立即free,如果多过一个函数用到的则没有例子。DM中的控件通常都不是只在一个函数中使用的,而且函数的调用顺序不一定固定,无办法写定在哪个函数中create,然后那个函数中free。=================================================2。有些提到可以通过在initialization和finalization中处理。(好像不行啊?)initialization if not Assigned(Dmmain) then DMMain :=TDMMain.Create(Application);finalization if Assigned(Dmmain) then begin DMMain.Free; end;===========================================3。有的就提到可以在DLLProc 中进行处理在dll的DLLMAIN函数内创建和释放DataMoudle,如:procedure DLLMain(dwReason:DWORD);begin case dwReason of DLL_PROCESS_DETACH : begin if Dm <> nil then begin Dm:=nil; end; end; DLL_PROCESS_ATTACH : begin if not Assigned(Dm) then Dm:=TDm.Create(Application); end; DLL_THREAD_ATTACH : begin end; DLL_THREAD_DETACH : begin end; end;end;{$R *.RES}begin DLLProc := @DLLMain; DLLMain(DLL_PROCESS_ATTACH);end.end==============================================4。一些则讲到可以不用自己销毁,系统会自动销毁。(Application是不是还需要在程序外传进来的?)1)创建时:"用DLL把Datamodule打包,只要在DLL的入口初始化Datamodule就好了."//dll主程序library erpsend;uses SysUtils, Classes, Forms, DMDatain DMData.pas' {DM: TDataModule};{$R *.res}exportsbegin Application.CreateForm(TDM, DM);end.2)销毁情况:"不需要自己手动调用,DLL卸载时会自动Free,不相信可以在DM.OnDestroy中写点代码,然后调试再一下看,结果是会执行到OnDestroy的!"(不知道是不是可行?)=============================
不要在DLL_PROCESS_ATTACH 中销毁可以在DLL另外创建两个过程或函数负责创建和销毁数据模块主程序启动时先调用创建数据模块的过程,关闭时再销毁(务必在FreeLibrary之前销毁)
=============================
1.在 use 中加入 ActiveX 2.在 implementation 下加入下列程式碼:initialization Coinitialize(nil);finalization CoUninitialize;