【发布时间】:2013-02-27 11:04:49
【问题描述】:
我正在尝试创建一个包含 VCL 数据模块的 dll - 其想法是各种应用程序都可以加载相同的 dll 并使用相同的数据库代码。
数据模块本身作为应用程序的一部分进行了测试 - 我已将表单复制到我的 dll 项目中。
所以在dll入口点方法中,我需要初始化数据模块:
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
//if I don't call this, I get an exception on initializing the data module
CoInitialize(NULL);
//initialize a standard VCL form; seems to works fine
//I'm not using Application->CreateForm as I don't want the form to appear straight away
if(!MyForm) MyForm = new TMyForm(Application);
//this doesn't work - the thread seems to hang in the TDataModule base constructor?
//I've also tried Application->CreateForm; same result
if(!MyDataModule) MyDataModule = new TMyDataModule(Application);
}
我还看到了一些关于我需要如何在创建表单之前调用 Application->Initialize 但这似乎没有任何区别。
有什么想法吗?
谢谢
【问题讨论】:
-
这可能相关也可能不相关:我可以初始化一个空的数据模块没问题。我的实际数据模块包含一个 ADOConnection 和一个 ADOQuery - 一旦我添加这些问题就开始了
-
我在线程中使用 ADO 组件时遇到了类似的问题。它需要调用 CoInitialize。不知道这对您的情况是否有帮助,但请尝试..
标签: c++ dll c++builder vcl datamodule