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

在Delphi7下怎么与DLL共享数据库连接

2012-04-23 
在Delphi7下如何与DLL共享数据库连接在Delphi7下如何与DLL共享数据库连接:exe里有DM:TDataModule1模块设置

在Delphi7下如何与DLL共享数据库连接

在Delphi7下如何与DLL共享数据库连接:
  exe里有DM:TDataModule1模块设置数据库连接,
  DLL里也有DM:TDataModule1模块设置数据库连接,
  我想把exe里DM:TDataModule1的地址传个DLL里的DM:TDataModule1;

  问题:我没调试出来,请各位帮忙!
部分代码如下:
DLL:

Delphi(Pascal) code
procedure Init(var dtm: TDataModule1);begin  DataModule1:= dtm;end;//声名调用的过程名的DLL文件procedure ShowFrm(var dtm: TDataModule1);begin  DataModule1:= dtm;  Frmdll_conn:= tFrmdll_conn.Create(application);  try    Frmdll_conn.ShowModal;  finally    Frmdll_conn.Free;  end;end;exports   Init,ShowFrm;begin

DLL里的Init:(初始化)
Delphi(Pascal) code
unit Init;interfaceimplementationuses DM,activex; //initialization  CoInitialize(nil);  DataModule1:= TDataModule1.Create(nil);finalization  DataModule1.Free;  CounInitialize;end.

EXE程序调用DLL:
Delphi(Pascal) code
TYPE  TShowFrm = procedure (var dtm: TDataModule1); stdcall;  TInit = procedure (var dtm: TDataModule1); stdcall;var  DLLHandle: THandle;procedure TForm1.DLL1Click(Sender: TObject);var  AShowFrm: TShowFrm;begin  @AShowFrm := GetProcAddress(DLLHandle, 'Init');  if Assigned(@AShowFrm) then     AShowFrm(DataModule1);end;procedure TForm1.FormCreate(Sender: TObject);VAR AInit: TInit;begin  DLLHandle := LoadLibrary('dll.dll');  @AInit := GetProcAddress(DLLHandle, 'Init');  if Assigned(@AInit) then     AInit(DataModule1);end;procedure TForm1.FormDestroy(Sender: TObject);begin  FreeLibrary(DLLHandle);end;


[解决办法]
你传递一个指针过去不好么?
[解决办法]
你把ADOConnection直接传过去,在写dll接口函数的时候adoconnection这个参数不就可以了吗
[解决办法]
同意二楼兄弟
只传ADOConnection就可以了

另外小心内存泄露!

[解决办法]
用文件把数据库连接字符串传过去不行吗
[解决办法]
exe和dll的.dpr文件的Uses语句中第一个引用单元一定要是ShareMem!!!
Delphi(Pascal) code
unit Init;interfaceimplementationuses DM,activex; //initialization  CoInitialize(nil);  ////DataModule1:= TDataModule1.Create(nil); 删除,由Exe传入finalization  ////DataModule1.Free; 删除,由Exe传入  CounInitialize;end.
[解决办法]
Delphi(Pascal) code
TYPE  TShowFrm = procedure (var dtm: TDataModule1); stdcall;  ////TInit = procedure (var dtm: TDataModule1); stdcall;var  DLLHandle: THandle;procedure TForm1.DLL1Click(Sender: TObject);var  AShowFrm: TShowFrm;begin  ///@AShowFrm := GetProcAddress(DLLHandle, 'Init');///这里也写错了,不是'Init'是'ShowFrm'  @AShowFrm := GetProcAddress(DLLHandle, 'ShowFrm');  if Assigned(@AShowFrm) then     AShowFrm(DataModule1);end;procedure TForm1.FormCreate(Sender: TObject);////VAR/// AInit: TInit;begin  DLLHandle := LoadLibrary('dll.dll');////  @AInit := GetProcAddress(DLLHandle, 'Init');///  if Assigned(@AInit) then///     AInit(DataModule1);end;procedure TForm1.FormDestroy(Sender: TObject);begin  FreeLibrary(DLLHandle);end;
[解决办法]
还是自己试试吧
Delphi(Pascal) code
procedure ShowFrm(var dtm: TDataModule1);stdcall;//没有约定好调用方法begin  DataModule1:= dtm;  Frmdll_conn:= tFrmdll_conn.Create(application);  try    Frmdll_conn.ShowModal;  finally    Frmdll_conn.Free;  end;end; 

热点排行