首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

MD小弟我已经精疲力尽了! 再得不到有效帮助,就退出这个项目了!

2012-02-10 
MD我已经精疲力尽了!! 再得不到有效帮助,就退出这个项目了!!!我在DLL中使用了数据库,程序调用它,有时开始

MD我已经精疲力尽了!! 再得不到有效帮助,就退出这个项目了!!!
我在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;

[解决办法]
TADOConnection.Create(nil);

CreateOleObject( "ADODB.Connection ")
替换试试
[解决办法]
直接用ADODC的_Recordset之类的
不要用VCL封装的,那就一定OK
[解决办法]
在动态链接库中好像不能使用这样的程序功能,可以是逻辑功能吧?用COM组建肯定行的通。
[解决办法]
建议先用exe测试稳定,然后再移植到dll中,99%是你的代码有问题


须要一步一步测试,要有耐心的.


[解决办法]
读空指针吧 代码太弱了 没有一个地方有Assigned
[解决办法]
在DLL上加参数传递调用程序窗体句柄

procedure getconn(hwnd:dword);
begin
CoInitialize(nil);
application.handle:=hwnd;
adoconn:=tadoconnection.create(application);

end;


EXE传递
getconn(handle);
[解决办法]
你先把try except都去掉再说...
[解决办法]
你这样编写,不出问题才怪。建议把各种控件放到一个DataModule上面,然后创建DataModule。而且尽量不要动态创建、释放这种与COM相关的对象。应该创建出来后,一用到底

热点排行