function create_abc(dbs: tdatabase): Tfront;
这是dll中声明的函数create_abc(dbs: tdatabase) TfronT 为类些函数返回类 dbs为连接数据库的
Tdatabase 数据库连接为BDE调用的时候TYPE
type
 TStrFunction=function ():Tfront;stdcall;
这样调出来有时行但大多时候不行提示出错。type
 TStrFunction=function (dbs: tdatabase): Tfront;但是Tdatabase这个类是在动态链接库中单元里面的设置。在调用的时候没有这个类
如果加入其单元调出数据也出错不知是何故

解决方案 »

  1.   

    兄弟们补充补充:
    此单元放两TDatabase控件用于连接数据库(A单元) 为BDE数据源type
      TDmd = class(TDataModule)
        Server1: TDatabase;
        Server2: TDatabase;函数(建立数据库连接)use A单元
    function create_abc(dbs: tdatabase): Tfront;
    var
    ......
    begin
       .......................................
        DM:= TDmd.Create(nil);
        dbs1 :=DM.Server1;
        dbs1.Connected := true;
       .........................................
    end;
    调用函数:
    type
     TStrFunction=function (dbs:Tdatabase):Tfront;stdcall;
      

  2.   

    TDmd的对象,在设计时没有,在运行时动态生成?如果是这样,那TDmd里面的Server1和Server2也需要动态生成啊!    DM:= TDmd.Create(nil);
        dbs1 :=DM.Server1;
        dbs1.Connected := true;
    单从上面可以认为,DM.Server1还没有被动态生成,难道在TDmd.OnCreate事件中建立了?还有,Tfront到底是如何定义的啊?我承认,我已经晕了。
      

  3.   

    一般来讲使用BDE,然后在DLL里传TDATABASE或者TSESSION是有问题的,这个在DELPHI的帮助里有讲,主要是因为TSESSION默认创建的时候是一个SINGLE实例,如果在DLL里不处理这个东西,那么在DLL的上下文环境里的默认的TSESSION和你的调用程序的TSESSION是不同的,所以其所属的TDATABASE也是不同。