0

我有一个运行良好的应用程序...移植它以作为 DLL 实现。我有一个数据模块,上面有我的数据库和 TTable 组件...在设计模式下,数据库设置为活动。表指向数据库,它们被设置为活动的。我可以右键单击表格,进入字段编辑器,查看所有列,所以我知道结构/属性设置得很好......

问题出在运行时...它在这条线上给了我一个 AV...

 if MyDataModule.DB1.Connected = True then
  ShowMessage('Active')
   else 
 ShowMessage('Not Active');

我在网上看到了一些提示,需要做一些特殊的事情才能在 DLL 中使用数据模块,但我没有得到任何工作。

具体报错信息为:

模块 'DocAssistCom.dll' 中地址 06D4E22E 的访问冲突读取地址 0000070'

4

1 回答 1

4

您应该验证MyDaModule确实已创建,然后MyDataModule.DB1在尝试使用MyDataModule.DB1.Connected.

if Assigned(MyDataModule) then
  if Assigned(MyDataModule.DB1) then
    if MyDataModule.DB1.Connected = True then
      ShowMessage('Active')
    else 
      ShowMessage('Not Active')
  else
    ShowMessage('MyDataModule.DB1 not assigned')
else
  ShowMessage('MyDataModule not assigned');

但是当您尝试使用它们时,它们可能仍未完全创建并准备好。

因此,与其分散ShowMessage调用,我宁愿在 IDEOutputDebugstring中使用和调试 DLL以查看代码路径......

注意: 我不知道您使用的是哪个版本的 Delphi 和 Windows,但请注意 TTable 需要 BDE(如今已被弃用)...

于 2011-12-08T18:54:38.187 回答