我在DLL中使用了数据库,程序调用它,有时开始时会弹出
"Access violation at address 00000000. Read of address 00000000."
可气的就是有时有,有时没有,出现的机率在20%左右!!!!
我想尽了办法,还是找不到错误出在何处!!!!
求高人指点迷津,实感激不尽!!!!!附上DLL中的主要部分:
DLL的BEGIN,END间:
try
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOConnection.LoginPrompt:=false;
ado:=TADODataSet.Create(nil);
ado1:=TADODataSet.Create(nil);
ado.Connection :=ADOConnection;
ado1.Connection:=ADOConnection;
except
end;
初始化函数:
//Receive init params
function InitVars(t:INITPARM):boolean;stdcall;
begin
try
//Get data inputed by user
pInit:=t;
//Init database connecting string
ADOConnection.Close;
ADOConnection.ConnectionString :=pInit.IniMDBConStr;
ADOConnection.Open();
//FillChar(vParm,sizeof(vParm),0);
except
end;
end;
DLL退出时
procedure opr(d:dword);
begin
if d=0 then begin
try
//ado.Free;
//ado1.Free;
//ADOConnection.Free;
CoUninitialize;
except
end;
end;
end;
"Access violation at address 00000000. Read of address 00000000."
可气的就是有时有,有时没有,出现的机率在20%左右!!!!
我想尽了办法,还是找不到错误出在何处!!!!
求高人指点迷津,实感激不尽!!!!!附上DLL中的主要部分:
DLL的BEGIN,END间:
try
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOConnection.LoginPrompt:=false;
ado:=TADODataSet.Create(nil);
ado1:=TADODataSet.Create(nil);
ado.Connection :=ADOConnection;
ado1.Connection:=ADOConnection;
except
end;
初始化函数:
//Receive init params
function InitVars(t:INITPARM):boolean;stdcall;
begin
try
//Get data inputed by user
pInit:=t;
//Init database connecting string
ADOConnection.Close;
ADOConnection.ConnectionString :=pInit.IniMDBConStr;
ADOConnection.Open();
//FillChar(vParm,sizeof(vParm),0);
except
end;
end;
DLL退出时
procedure opr(d:dword);
begin
if d=0 then begin
try
//ado.Free;
//ado1.Free;
//ADOConnection.Free;
CoUninitialize;
except
end;
end;
end;
解决方案 »
- TNofiFyEvent 是什么类型? 对创建组件事件有什么用?
- 100分在线等待解决dll线程里对vcl的操作
- 求救,关于grid的问题?????
- 用webbrowser提取网页编码的问题。
- 200分求UP
- 调查:请列出您认为的,出版编程书籍最好的出版社 我觉得这对我们日后购书很有帮助
- 请问各位朋友,有谁买过delphi软件的吗?如何知道自己买的是正版的呢?
- 请教:如何改变下拉菜单的背景严色
- installshield安装程序?
- 有修改文件夹名的函数么?
- 请问这样的sql语句在delphi中如何执行?如何写成sql中的函数或过程?
- 为什么老是报"Destination file already exists"
我相信一定有解决方法的,期待...
用
CreateOleObject("ADODB.Connection")
替换试试
不要用VCL封装的,那就一定OK
须要一步一步测试,要有耐心的.
偶DLL用的是从EXE中传进去的对象!
begin
CoInitialize(nil);
application.handle:=hwnd;
adoconn:=tadoconnection.create(application);end;EXE传递
getconn(handle);
例如:CoInitialize();
query := TADOQuery.Create(nil);”
申明:这不是我说的,转帖!
先把分结了,如果能有效解决此问题的,另开贴给分.