CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

如何动态装载DLL的导出类?

楼主color99(木头人)2005-05-18 15:52:41 在 VC/MFC / 进程/线程/DLL 提问

我的DLL包括一个对话框,我想在MDI框架中动态地装入这个DLL,然后显示出来。  
  在DLL的h   中我已经定义:class   AFX_EXT_CLASS   CDlg   :   public   CDialog   导出CDlg这个类  
  如果是静态调用只要装入   lib   和   h   文件就可以直接使用这个类了,如果采用动态装入的方法该怎么做呢? 问题点数:100、回复次数:11Top

1 楼newzk(zk)回复于 2005-05-18 15:56:24 得分 0

导出类好像只能静态调用吧,帮你顶Top

2 楼color99(木头人)回复于 2005-05-18 15:59:23 得分 0

我是这样计划的:  
  框架使用MDI,然后每个子模块打包成一个DLL,在框架中只需load这个DLL就可以使用这个模块,如果不发布这个DLL的话可以限制客户使用这项功能,当然也要以发布DLL来Updata软件的功能。Top

3 楼krh2001(边城浪子)回复于 2005-05-18 16:13:17 得分 20

可以动态加载,不过实现起来会很麻烦的.   你需要从DLL   中取每一个成员函数的地址,   通常这些函数的名字会是乱的.你可能要在DLL里给函数重新命名.  
  Top

4 楼color99(木头人)回复于 2005-05-18 16:28:02 得分 0

To     krh2001(边城浪子)    
  那我这种开发思路是否真正的可行?COM我是不想使用的了,因为我对它的了解太少。Top

5 楼younggle(洋溢)回复于 2005-05-18 16:33:59 得分 55

可以的啊。动态加载也不难的啊。  
  可以使用LoadLibrary和GetProcAddress进行实现。  
  HINSTANCE   hInst   =   LoadLibrary("User32.DLL");    
  if(hInst)    
  {                          
  typedef   BOOL   (WINAPI   *MYFUNC)(HWND,COLORREF,BYTE,DWORD);                      
  MYFUNC   fun   =   NULL;  
   
  fun=(MYFUNC)GetProcAddress(hInst,   "SetLayeredWindowAttributes");  
  if(fun)fun(this->GetSafeHwnd(),0,250,2);            
  FreeLibrary(hInst);    
  }  
  Top

6 楼color99(木头人)回复于 2005-05-18 17:19:43 得分 0

TO   younggle(洋溢)    
  SetLayeredWindowAttributes这个函数该怎么写呢?  
  它应该是DLL里面定义的一个函数吧?它应该返回一个窗口的句柄吧。你能写得具体些吗?Top

7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-18 21:35:38 得分 5

记得codeguru那有个动态加载类的例子Top

8 楼san_huo(煽风点火)回复于 2005-05-18 22:56:36 得分 10

你可以将所有接口做成类导出     然后不同的版本有不同的实现,但接口没变就可以了。  
  com看起来难,实际使用也就那样,不是很复杂,建议使用。Top

9 楼etre(林荃)回复于 2005-05-19 09:41:16 得分 0

extern   "C"   AFX_EXT_API   UINT   CreateDockBar(ObtGuiGcomDockingControlBar**   toolBar,CCreateContext*   pContext)  
  {  
  *toolBar   =   new   ObtGcomChatOpiBar(pContext);  
  return(0);  
  }  
  我是这样的.Top

10 楼final()回复于 2005-05-19 10:13:02 得分 10

可以实现的,   使用一个抽象类,   所有dialog都从该抽象类派生,然后写一个api接口去取   CDialog的实例指针.  
  Top

11 楼ys0102(晨晓)回复于 2005-07-14 11:43:41 得分 0

动态导出类的函数好像不是什么时候都能搞定的,如果类有用户自己的构造函数,并且其他函数需要用到这个类的私有成员变量的时候,导出的问题就来了!类的成员函数通常只有类的对象(除了静态的成员函数)才能调用,这时的动态调用就没法进行了!!!Top

相关问题

  • dll导出类
  • 怎样从DLL中使用类,导入,动态导出。
  • 请问如何动态从dll中导出类??
  • 如何在动态加载调用dll中的导出类
  • 有关vc下动态装载dll的问题
  • 请求AppDomain和Assembly动态装载、卸载DLL的代码
  • DLL导出函数
  • dll导出问题
  • DLL"导出"问题.
  • DLL导出问题

关键词

  • 函数
  • 框架
  • 接口
  • dll
  • 导出
  • 类
  • 动态
  • 加载
  • 调用
  • 装入

得分解答快速导航

  • 帖主:color99
  • krh2001
  • younggle
  • oyljerry
  • san_huo
  • final

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo