在一个DLL模块里放一个ADO的控件,调用就会出错,请问是什么原因?(100分)

  • 主题发起人 主题发起人 easy.net
  • 开始时间 开始时间
E

easy.net

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个DLL模块里放一个ADO的控件,调用就会出错,请问是什么原因?
你们试过吗?
 
出什么错?是动态生成的吗?释放了没有?
 
是DLL里的一个窗口,窗口里放一个ADO的控件,不是动态的。
把这个窗口SHOW出来时好像是读什么地址出错,你试试就知道了。
是在DELPHI6中使用出错,听说Delphi5没有这个问题,我末试过。
 
因你使用的是 DLL
所以必須自己建立包含資料表格元件的Data Module.
在 Dll
initialization
..
dmObject:= DataModel.create(nil);
..
finalization
dmObject.Free
end.
 
我刚试过,在delphi5中一切正常,无理由在delphi6中用同样的方法会出错的,你试过了吗?
应该不是你所说的原因。
 
出程序中分别调用CoInitialize和CoUninitialize初始化Com
 
我楼上说的是对的.以前的贴子有答案.
 
yzhshi 是否可以说明白点,如果能解决,100分全部送上。谢谢。
 
我要把DLL中包含的FORM显示出来,我应该在哪里初始化?
希望有个例子。
或者以前帖子的地方。谢谢。
 
uses sharemem
dll和调用都要use
必须use在第一个
 
前两天刚刚解决掉,首先确定是DELPHI5还是6,如果是D6,只要建个TDataModule,
把TADODataSet放上去就行了。
 
多谢qsilence,我先试试,如果可以,保证分数送上。
 
谢谢你们。
 
稍微解释一下:
因为Ado实际上是Com,在调用Com以前需要进行初始化,就是使用CoInitialize进行。
如果不进行初始化,就会出问题的。
特别是在动态链接库中使用了Ado,而在主程序中没有初始化,那么调用的时候就会出现
没有初始化CoInitialize的错误。
如果你在主程序中也使用了Ado控件,那么就不会出这个问题,因为在Ado单元里面已经调用了CoInItialize了。

所以,如果你出现的错误是没有初始化CoInitialize,那么在主程序中执行这个就可以了。

如果你出现的问题不是这个,那么就要考虑别的问题了,如:将主程序句柄传入等等。
 
谢谢 yzhshi 详细的说明,原因已经找到了。
 
后退
顶部