全部博文(788)
分类:
2008-11-27 21:17:38
可以要用 ShareMem, 放在用到 dll 和 dll 的第一 use 顺序处
同意楼上,另外,如果不是多线程,没有必要加CoInitialize(nil);这句,也容易造成地址错误。
帮顶
早就过ShareMem.
没用.
不用CoInitialize(nil)这句,编译都通不过.
没有那么多的迷呀 LZ F1帮助 可解决LZ一切问题~~
而且这个异常出现的很奇怪, 有时甚至打开QQ对话框, 也会导致它出错!
或打开其它一个软件或文件, 也导致其出那个错误, 而且错误都发声在访问ADO对象时!!!!
难解之谜啊
LZ这么写 把 ado:=TADODataSet.Create(nil);创建的时候写到异常里面去捕捉
ado:=TADODataSet.Create(nil);
try
执行ado要读取数据的代码
finally
ado.free;
and;
晕...拜托你看看题目再答吧,兄弟!!
创建对象时根本无任何问题,何况有时也能正常工作?
可能是dll中的ado连接的ADOConnection的问题,如果ADOConnection是放在数据模块中,而数据模块也是放在dll中,则这样使用肯定出错,如果是这种情况,你必须在装载dll时显式创建数据模块。
给你作了一个完整的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.
老冯:
1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在?
2.可以将其它的ADO对象换成全局的吗?
1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在? (没有测试过)
2.可以将其它的ADO对象换成全局的吗? 可以(测试过)
1.一定得用 ADODataSet.Connection吗? 这是不是那问题的症结所在? 可以 (刚刚测试过)
问题症结应该在
CoUnInitialize;
不过我建议就按我上面的规格办。我所有的系统涉及这些元件我都是这样办的。久经沙场的。呵呵呵呵
CoUnInitialize;
我试过N次了, 加不加这个东西,都一样会有时报错