首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

MDI动态调用同一个DLL中的多个头窗体

2012-08-02 
MDI动态调用同一个DLL中的多个子窗体想法:做一个通用的MDI主程序,菜单从数据表中动态创建!数据表中保存我

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; 

热点排行