求教:在dll中的窗体怎样使用ado及其组件? (50分)

  • 主题发起人 主题发起人 redw
  • 开始时间 开始时间
R

redw

Unregistered / Unconfirmed
GUEST, unregistred user!
在dll中的窗体怎样使用ado及其组件?请给个例子。谢谢!
 
不能和普通的程序一样使用吗?
 
好像不可以,调用老是出错,dll中的窗体包括<br>&nbsp;一个adoquery组件,调试总是出现错误
 
你试试在你的DLL主窗口中增加一个TDATABASE控件,它不需要做任何操作。<br>
 
需要传递TAdoConnection作为DLL的参数
 
应该是TAdoConnection
 
谢谢,我试看看
 
不可以直接用,做为参数传进去就可以了
 
好像还不行
 
窗体里自己采用TAdoConnection和TAdoDataset/TAdoQuery/TAdoConnand等构成ADO数据库联接与查询,与EXE中作法完全一样。<br><br>所不同的是:要在动态库加载时调用:CoInitialize(nil); &nbsp;// 手动初始化COM.<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 在动态库卸载时调用:CoUninitialize; &nbsp; &nbsp; // 释放COM占用的资源<br>由于ADO是以COM接口形式与应用通讯的,应用程序必须要初始化,以申请资源。<br>在exe中,VCL自动进行此类工作,但DLL未做,因而在DLL中使用ADO(以及COM)时要初始化。
 
第一你要创建TAdoConnection。第二个问题,你的Com库没有初始化。所以麻烦你在你的代码的实现里包含<br>ActiveX单元,以便使CoInitilizeEx函数被正确调用了。是在你的exe程序中,不是DLL中,ActiveX单元在<br>DLL中不会调用CoInitilizeEx,这是borland的实现策略,初始化COM库是exe的责任。<br>总之这个问题有人说算是DELPHI的一个BUG。你用CoInitilizeEx为关键字搜索大幅翁,将得到无数可怕的有益答案。
 
library XXXXXXXXXXX;<br><br>uses<br>&nbsp; SysUtils,<br>&nbsp; ActiveX,<br>&nbsp; Classes........;<br><br>{$R *.res}<br><br>exports<br>&nbsp; XXXXXXXXXX;<br><br>begin<br>&nbsp; CoInitialize(nil);//这里<br>end.
 
不用加CoInitialize(nil);<br>只要use activex就可以了。
 
后退
顶部