我想在DLL库中动态生成ADO组件打开数据库,不过调用时出错,请教如何正确地在DLL库中生成组件?以下代码哪里不对,怎么改才行?function englishtochinese(english:pchar):pchar;export;stdcall;
var
 s:string;
 ADOConnection1:TADOConnection;
 ADOquery1:TADOQuery;
begin
ADOConnection1:=TADOConnection.Create(ADOConnection1);   //这括号里改为self不行。
ADOquery1:=ADOquery1.Create(ADOquery1);              //这括号里改为self不行。
...............

解决方案 »

  1.   

    因为Ado组件是ActiveX,所以,在dll中用到时,要初始化,先用如下语句:
    CoInitialize(nil);
    最后,在程序退出前,用: CoUninitialize;
    记得要uses ActiveX;
    还有,我习惯用 Create(nil); 或 Create(self); 
    我在我以前的一个项目中,在dll使用ado相关的组件,没什么问题,如你还有问题,可提出来!
      

  2.   

    DLL中那个函数
    并不是类
    所以没有实例指针self
    至于 Coinitialize
    你可以试一下
    我不敢断定是不是有用
      

  3.   

    因为Ado组件是ActiveX,所以,在dll中用到时,要初始化,先用如下语句:
    CoInitialize(nil);
    最后,在程序退出前,用: CoUninitialize;
    记得要uses ActiveX;
    我习惯用 Create(nil);
    一定要用CoInitialize(nil);,否则一到创建的时候就要报错的
    function englishtochinese(english:pchar):pchar;export;stdcall;
    var
     s:string;
     ADOConnection1:TADOConnection;
     ADOquery1:TADOQuery;
    begin
      CoInitialize(nil);
    ADOConnection1:=TADOConnection.Create(nil);   //这括号里改为self不行。
    ADOquery1:=ADOquery1.Create(nil);              //这括号里改为self不行。
    ...............
    //退出时候别忘了Couninitialize;
      

  4.   

    谢谢: ljmanage(过客)!!!真高。我的问题解决了。但对类没有研究,还不知道为什么这样做不行:ADOConnection1:=TADOConnection.Create(self);   //这括号里改为self不行。
    ADOquery1:=ADOquery1.Create(self);              //这括号里改为self不行。如果在不是库而是窗体中,self是编译通过了的。