这个问题我已经解决了。
既然,没有人回答,我只好自己回答了,也算给大家一点启发吧。
在dll里使用数据模块,首先要在DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
CoInitialize(NULL);//初始化COM对象
break;
case DLL_PROCESS_DETACH:
CoUnitialize(NULL);
break;
//释放COM对象
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
default:
break;
}
return 1;
}
在主窗体或被调用窗体的FormCreate事件中加入如下代码:
DataModule2 = new TDataModule2(NULL);
//在FormClose事件中加入如下代码
void __fastcall TForm1::FormClose(TObject* Sender)
{
delete DataModule2;
DataModule2 = NULL;
}
//在被调用窗体(或主窗体)的头文件中加入出口函数的声明
extern "C" __declspec(dllexport)void ShowForm();
//在.cpp文件中的函数定义为
void ShowForm()
{
TForm1 *Form1 = new TForm1(NULL);
Form1->ShowModal();
delete Form1;
}
//在调用窗体的头文件中的加入入口函数
private:
typedef void __declspec(dllimport)ShowType();
ShowType *LoadFunction();
//具体的使用方法为
void __fastcall TForm2::Button1Click(TObject* Sender)
{
HINSTANCE Dll = LoadLibrary("Store.dll");//动态调用
if (Dll)
{
LoadFunction = (ShowType*)GetProcAddress(Dll, "_ShowForm");
if (LoadFunction)
LoadFunction();
else
ShowMessage(SysErrorMessage(GetLastError());
FreeLibrary(Dll);
}
else
{
ShowMessage(SysErrorMessage(GetLastError()));
ShowMessage("Unable to load the Dll");
}
}
注意:在dll里要调用的窗体的显示都要动态的创建。例如
TOutStoreFrm *OutStoreFrm = new TOutStoreFrm(this);
OutStoreFrm->ShowModal();
delete OutStoreFrm;