我想使用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.
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.
DataConn := TADOConnection.Create(nil);
在使用前必须先初始化:
DataConn:=TADOConnection.Create(nil);
然后:
DataConn.ConnectionString:=GSqlConn;
DataConn.Connected:=True;
就出现调用出错的情况了,应该不是AdoConnection创建出错的原因吧。不过当然是要如各位所说那样事先要先创建的。我想可能是楼主在进行转换时出了点小错吧,呵呵
不行吗?
DLL文件是可执行程序的一种,系统在为其分配空间的时候的默认地址和Exe文件一样,默认起始地址都是$400000,如果这个地址已有进程占用,则系统会再为它分配地址空间,所以我认为DLL和EXE的地址空间是同一级的,dll文件不能访问其他进程的地址
不知道我说的是否正确,请高手解惑 呵呵