Я пытаюсь создать dll, содержащую модуль данных VCL - идея состоит в том, что различные приложения могут загружать одну и ту же DLL и использовать один и тот же код базы данных.C++ Builder XE2: Инициализация модуля данных в 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 - как только я добавляю их, проблема начинается – user1898153
У меня была аналогичная проблема при использовании компонентов ADO в потоках. Для этого требовалось CoInitialize. Не знаю, поможет ли это в вашем случае, но попробуйте. – Tracer