MDI动态调用同一个DLL中的多个子窗体
想法:
做一个通用的MDI主程序,菜单从数据表中动态创建!数据表中保存我需要用到的DLL,子窗体的名称等等!不同的系统,只用修改这个数据表内的数据,并拷贝相应的DLL就可以使用!
要实现的功能:
点击菜单动态的调用指定的DLL中的子窗体!
要求:
在DLL中写一个通用的函数或过程来创建并显示子窗体!
注意:同一个DLL中有N多个子窗体!
现在需要的是这个DLL需要怎么写?也就是这个通用的函数或过程怎么写?
[解决办法]
利用包实现,通过传入父窗体句柄
主窗体代码,下面代码中通过getdllname,getformname从数据表中获取dll和form名
- Delphi(Pascal) code
procedure TFrmMain.rundll(pDllName:String;pName:String);var dllHandle:Cardinal; ShowForm:TShowForm;begin dllHandle := LoadLibrary(PChar(pDllName)); if dllHandle = 0 then begin Application.MessageBox(pChar('DLL[' + pDllName + ']无法载入'), '错误', MB_ICONINFORMATION + MB_OK); Exit; end; if dllHandle <> 0 then begin ShowForm := GetProcAddress(dllHandle,'ShowForm'); if @ShowForm <> nil then begin try ShowForm(Application, FrmMain, Screen, pchar(getFormName(pName))); except Application.MessageBox(pChar('[' + getFormName(pName) + ']打开失败'), '错误', MB_ICONINFORMATION + MB_OK); end; end; end;end;