【发布时间】:2011-12-08 18:01:37
【问题描述】:
我有一个运行良好的应用程序... 移植它以作为 DLL 实现。 我有一个数据模块,上面有我的数据库和 TTable 组件...... 在设计模式下,数据库设置为活动。 表指向数据库,它们被设置为活动的。 我可以右键单击表格,进入字段编辑器,然后查看所有列,所以我知道结构/属性设置良好....
问题出在运行时... 它在这条线上给了我一个 AV...
if MyDataModule.DB1.Connected = True then
ShowMessage('Active')
else
ShowMessage('Not Active');
我在网上看到提示,需要做一些特殊的事情才能在 DLL 中使用数据模块,但我没有得到任何工作。
具体错误信息为:
模块“DocAssistCom.dll”中地址 06D4E22E 的访问冲突读取地址 0000070'
【问题讨论】:
-
您确定要在使用它之前为数据模块创建一个实例吗?
-
正如@RRUZ 指出的那样,请注意数据模块(添加到 VCL 表单应用程序时)是自动创建的(如果您查看项目源代码),而当您创建 dll 时,您需要手动创建在可以对其上的组件进行任何调用之前创建数据模块的实例,即访问数据库
-
请注意以备将来参考:任何时候您的手指输入短语
AV、access violation、'error, orexception`,他们应该开始输入的下一件事就是精确 您收到的错误消息,包括任何内存地址或错误代码。对于试图帮助您解决问题的人来说,说“它给了我一个 AV”绝对没有用;错误消息可以极大地加快速度(即使它对您毫无意义),更快地为您提供解决方案。谢谢。 :) -
可能性...所以我添加了 MyDataModule := tdm_Text.Create(nil);到初始化部分。为了测试这一点,我还在 DataModule.OnCreate 事件中添加了一个 ShowMessage。在调用业务代码之前,我确实看到了这一点。
标签: delphi dll datamodule