在dll里有var 
Connection: tadoconnection;
begin
Connection := tadoconnection.Create(self);//编译不了
Connection := tadoconnection.Create(nil);//可以通过,
end;但如果在DLL里用
Connection := tadoconnection.Create(nil);//(注:此句不放在dll时,调用函数没有问题)
调用DLL函数时,况提示出错
-----
exception econverterror in module ****.dll at 0001d034
-----Q:
1,在用create对象时self与nil的作用是什么?
2,如果我想在DLL里创建tadoconnection,怎办?
3,上面的出错提示是说什么啊?

解决方案 »

  1.   

    不在对象内部就不能用self变量,create的时候只是owner,可以用application
    带包运行project-option-package-build with runtimes ..选中
    内存访问错误
      

  2.   

    to jinjazz:Q:
    1,
    "不在对象内部就不能用self变量"
    为什么在dll里就是"不在对象内部"啊?
    2,
    "project-option-package-build with runtimes ..选中"
    运行不了程序,提示找不到动态链接库(一个文件***.bpl),
    bpl文件主要有什么作用?
      

  3.   

    你在连接函数中加一个 owner
      

  4.   

    同意宝宝,用把连接信息写入INI或者注册表都可以的。
      

  5.   

    我现在也在研究dll,我感觉需要理解面向对象的一些概念,然后再研究dll。我现在正在看《高手突破》、刘艺的《delphi面向对象编程思想》。
      

  6.   

    这个与INI文件存信息没有冲突的啊.用了INI也要创建对象的
      

  7.   

    你这样写看看
    CoInitialize(nil)
    try
    Connection := tadoconnection.Create(nil);//
    finally
    CoUninitialize;
    end;
      

  8.   

    CoInitialize(nil)编译不了,提示未定义.联机帮忙里又找不到CoInitialize,请问怎办?
      

  9.   

    找到错误之所以了.调用DLL函数时,况提示出错
    -----
    exception econverterror in module ****.dll at 0001d034
    -----
    是因为DLL返回的是TSTRINGLIST值;对于函数返回值的接收(一般函数及DLL函数),测试过以下三种情况;
    1,
    combobox1.items := dll函数(tstringlist)    //出现类型转换错误;
    2,
    combobox1.items := 一般函数(tstringlist)   //正常
    3,
    combobox1.items.addstrings(dll函数(tstringlist));    //正常;