在dll里使用数据模块(100分)

  • 主题发起人 主题发起人 sunlw
  • 开始时间 开始时间
S

sunlw

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:
如何在dll里使用数据模块呢?
 
补充:
我现在正在做一个管理系统,由于是合作,我想把自己做的程序(里面有数据模块),封装成DLL供别人调用,可是在做好的dll调用时总是出现,访问地址的错误。不知如何处理,请大家帮忙。
 
这个问题我已经解决了。
既然,没有人回答,我只好自己回答了,也算给大家一点启发吧。
在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;
 
好贴,帮你顶
 
后退
顶部