我想使用data Module 来创建一个公用的ADOConnection 连接,我的程序是MDI窗口+DLL文件构成的,Data Moudle 创建于其他窗口前,我在data Moudle中,写了些代码(见下),在主窗体中(Data Moudle 和主程序在一起编译成可执行文件),我可以成功调用,但在Dll中使用是老提示“Access violation at address 0086766 in module 'ProBrick.dll',Read of address 0000002c”,请问如何能够成功调用data moudle 啊?在线恭候!!unit DMLink;
interface
uses
  SysUtils, Classes, DB, ADODB;
type
  TDMWindow = class(TDataModule)
    DataConn: TADOConnection;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  DMWindow: TDMWindow;
implementation
uses PublicVariable, PublicFun;
{$R *.dfm}
procedure TDMWindow.DataModuleCreate(Sender: TObject);
begin
  if Not GetRegistr then Exit;
  GSqlConn:=Pchar(GetConnString);
  DataConn.ConnectionString:=GSqlConn;
  DataConn.Connected:=True;
end;
end.

解决方案 »

  1.   

    DataConn 必须这样
    DataConn := TADOConnection.Create(nil);
      

  2.   

    你生成的DataConn变量
    在使用前必须先初始化:
    DataConn:=TADOConnection.Create(nil);
    然后:
    DataConn.ConnectionString:=GSqlConn;
    DataConn.Connected:=True;
      

  3.   

    加哪儿啊?Data Moudle中还是在Dll文件中需要再创建?请明示。谢谢!
      

  4.   

    我想楼主的意思是DataModule内容不作成dll跟主程序在一起是运行正常的,但作成dll之后
    就出现调用出错的情况了,应该不是AdoConnection创建出错的原因吧。不过当然是要如各位所说那样事先要先创建的。我想可能是楼主在进行转换时出了点小错吧,呵呵
      

  5.   

    看来是我没有说清楚,我的DataMoudle是和主程序一起运行,AdoConnection不是动态创建的是使用控件添加的,我要在Dll中调用,但是在调用时会出错,上面的几位前辈们说的我试了一下不行,这回是些地址错误,谁能有更好的方法啊?非的DataConn:=TADOConnection.Create(nil);
    不行吗?
      

  6.   

    也許是dll代碼的問題.GetConnString是哪的?
      

  7.   

    GetConnString是我自己的一个函数,用来从注册表中读取些变量,拼装一个数据库连接字串,这个应该没有问题。
      

  8.   

    我对dll不是很精通,不敢肯定楼主的问题所在,不过我的一下分析可以作为参考,请大家帮忙分析有无道理:
      DLL文件是可执行程序的一种,系统在为其分配空间的时候的默认地址和Exe文件一样,默认起始地址都是$400000,如果这个地址已有进程占用,则系统会再为它分配地址空间,所以我认为DLL和EXE的地址空间是同一级的,dll文件不能访问其他进程的地址
      不知道我说的是否正确,请高手解惑 呵呵