有关于DLL中Datamodule的使用

====================================================

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}

exports

begin
  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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值