搜索了之前的贴子,未找到有用的信息.MD,搞了一天,头都大了,仍然找不到原因:
我在DLL中声明了全局ado:TADODataSet;
DLL装载时也有
  CoInitialize(nil);
  ado:=TADODataSet.Create(nil);
但是在读取记录时,
   ado.CommandText:='select text from Menus where id='+inttostr(MenuID);
   ado.Open;
   n:=ado.recordcount; 
  或 ado.recno:=1; 主程序调用此DLL时,走到最后两条这里有时就报内存地址错误, 但有时又没有. 有错误时,严重时会令主程序退出!!!
改用DataMoudle,问题依旧!!!
百思不得其解,到底为什么???

解决方案 »

  1.   

    可以要用 ShareMem, 放在用到 dll 和 dll 的第一 use 顺序处
      

  2.   

    同意楼上,另外,如果不是多线程,没有必要加CoInitialize(nil);这句,也容易造成地址错误。
      

  3.   

    早就过ShareMem.
    没用.不用CoInitialize(nil)这句,编译都通不过.
      

  4.   

    没有那么多的迷呀 LZ F1帮助 可解决LZ一切问题~~ 
      

  5.   

    而且这个异常出现的很奇怪, 有时甚至打开QQ对话框, 也会导致它出错!
    或打开其它一个软件或文件, 也导致其出那个错误, 而且错误都发声在访问ADO对象时!!!!
    难解之谜啊
      

  6.   

    LZ这么写 把 ado:=TADODataSet.Create(nil);创建的时候写到异常里面去捕捉ado:=TADODataSet.Create(nil);
    try
      执行ado要读取数据的代码
    finally
      ado.free;
    and;
      

  7.   

    可能是dll中的ado连接的ADOConnection的问题,如果ADOConnection是放在数据模块中,而数据模块也是放在dll中,则这样使用肯定出错,如果是这种情况,你必须在装载dll时显式创建数据模块。
      

  8.   

    给你作了一个完整的DEMO,连续测试了1000次,OK。uses
      SysUtils,
      Activex,
      ADODB,
      Classes;{$R *.res}function DataExport: integer;
    var
      ADOConnection: TADOConnection;
      ADODataSet : TADODataSet;
    begin
      CoInitialize(nil);
      ADOConnection := TADOConnection.Create(nil);
      ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=WANGS;Data Source=.';
      ADOConnection.LoginPrompt := False;
      ADODataSet:= TADODataSet.Create(nil);
      ADODataSet.Connection := ADOConnection;
      try
        ADODataSet.Close;
        ADODataSet.CommandText:= 'Select * From TWangs_UserInfo ';
        ADODataSet.Open;
        Result := ADODataSet.RecordCount;
      finally
        ADODataSet.Free;
        ADOConnection.Free;
        CoUnInitialize;
      end;
    end;exports
      DataExport;begin
    end.
      

  9.   

    老冯:
    1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在?
    2.可以将其它的ADO对象换成全局的吗?
      

  10.   

    1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在? (没有测试过)2.可以将其它的ADO对象换成全局的吗? 可以(测试过)
      

  11.   

    1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在? 可以 (刚刚测试过)问题症结应该在CoUnInitialize;
      

  12.   

    CoUnInitialize;
    我试过N次了, 加不加这个东西,都一样会有时报错