不知道是不是和Win32的内存管理有关?因为在Win32下每个进程都有自己的内存映象,
而TDatasource实际是一个指向地址的指针变量,是不是要用共享内存?

解决方案 »

  1.   

    这个问题不是解决了指针就可以了那么简单的,建议用BPL代替DLL,而且如果一定要实现传递TDataSource作为参数
    只能用BPL来解决。
      

  2.   

    这个涉及到Delphi的数据库解决方案的架构,以及Delphi程序的架构问题,一两句话说不清楚
      

  3.   

    很多方面BPL肯定不能替代DLL的,用BPL太浪费内存
      

  4.   


      用Variant打包数据发送.
      

  5.   

    to enlightenment:
    能具体点吗?
      

  6.   

    to :softdog(阿建) 
     
      对于数据库程序来说,这一点点内存是用不到考虑的,  其实你用DLL的实现方式,那么在这一个进程空间里,Application对象有至少有两份,
      Session对象也是,对于BDE来说,所有的资源消耗基本上也增加一倍,其他的所有Delphi
      程序的全局变量都是如此,而且,在不同的代码段,这些代码访问到的都还是处于不同模组
      里的全局变量,你自己去同步这些?  不信可以做个测试:
        在DLL里,设定Application.Title = 'Application variable in DLL';
      在到你的程序里去读Application.Title,看看是什么,   用BPL来完成这些,Delphi会为你保证所有的这些全局变量都只有一份,用到的时候也
      自然不用担心访问的到底是哪一个,就算程序大了些,内存用的多了些(这还不一定呢),
      对于现在的计算机,在乎这一点点吗,再说,数据库程序,本身就要很多资源(包括内存),
      省下这一点是微不足道的。
      

  7.   

    to BaldZhang(BaldZhang):这两天我看了李维的关于包技术的文章,可是我怎么试都没办法取得bpl中的类名,GetClass得到的结果总是nil,我把源码贴出来,能帮我看看吗?Thank you!************* bpl的一个单元中 ****************
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TMyForm = class(TForm)
        Memo1: TMemo;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MyForm: TMyForm;
      
    implementation{$R *.DFM}initialization
      RegisterClass(TMyForm);
    end.
     
    ************** 主程序中 ******************
    var
        h: HModule;
        c: TPersistentClass;
        f: TCustomForm;
    begin
      h := Loadpackage('package1.bpl');  c := GetClass(Edit1.Text);
      if c <> nil then
      begin
        f := TCustomForm(TComponentClass(c).create(application));
        f.ShowModal;
      end
      else
        Beep;
    end;
      

  8.   

    试过了,你的主程序要用 Build With  Run-time Package 选项来编译。
    Project --> Options --> Packages --> Build with run-time packages 要打勾。