程序调用动态链接库中的方法,位图,类
2013-09-11 15:29
417 查看
1. 添加MFC Dll项目。
在全局区域添加需要用到的方法、类等信息。
找到项目中扩展名为“.def”的文件,在EXPORTS中导出需要的函数。
2. 对上个项目编译完成后,添加MFC应用程序,此处为对话框应用程序。
在界面上添加一个图片控件,并添加一个变量CStatic 类型的m_bit。
在全局区域添加需要用到的方法、类等信息。
void _stdcall ShowDlg() { AfxMessageBox(_T("动态链接库中的Dll对话框!")); } //-------------------------------// HBITMAP _stdcall GetBitmapFromDll() { return LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP_W));//IDB_BITMAP_W位图ID } //--------------------------------// class CSkin { public: virtual HBITMAP GetBkMap() { return LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP_W)); //在向动态链接库中添加类时,如果应用程序要访问类中的方法,则方法必须是虚方法。 } }; CSkin * _stdcall GetSkobj() { return new CSkin(); //构建CSkin对象 } void _stdcall RealeaseSkobj(CSkin * cs) { delete cs; //释放CSkin对象 cs=0; }
找到项目中扩展名为“.def”的文件,在EXPORTS中导出需要的函数。
; SkinDll.def : 声明 DLL 的模块参数。 LIBRARY "SkinDll" EXPORTS ShowDlg; GetBitmapFromDll; GetSkobj; RealeaseSkobj ; 此处可以是显式导出
2. 对上个项目编译完成后,添加MFC应用程序,此处为对话框应用程序。
在界面上添加一个图片控件,并添加一个变量CStatic 类型的m_bit。
typedef void (_stdcall *funShowDlg)(); typedef HBITMAP (_stdcall *funGetBitFromDll)(); void CSlinMainDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 HMODULE hMod=LoadLibrary(_T("SkinDll.dll")); funShowDlg ShowDlg; if(hMod) { ShowDlg=(funShowDlg)GetProcAddress(hMod,"ShowDlg"); if(ShowDlg) { ShowDlg(); } FreeLibrary(hMod); } } void CSlinMainDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 HMODULE hMod=LoadLibrary(_T("SkinDll.dll")); funGetBitFromDll GetBmp; //定义函数指针 if(hMod) { GetBmp=(funGetBitFromDll)GetProcAddress(hMod,"GetBitmapFromDll"); if(GetBmp) { HBITMAP hMap=GetBmp(); m_bit.SetBitmap(hMap); } FreeLibrary(hMod); } } //------------------------------------------------- class CSkin { public : virtual HBITMAP GetBkMap()=0; }; typedef CSkin* (_stdcall *funGetSkobj)(); typedef void (_stdcall *funRealeaseSkobj)(CSkin * cs); void CSlinMainDlg::OnBnClickedBtnC() { // TODO: 在此添加控件通知处理程序代码 HMODULE hMod=LoadLibrary(_T("SkinDll.dll")); funGetSkobj Getobj; funRealeaseSkobj Realeaseobj; if(hMod) { Getobj=(funGetSkobj)GetProcAddress(hMod,"GetSkobj"); Realeaseobj=(funRealeaseSkobj)GetProcAddress(hMod,"RealeaseSkobj"); if(Getobj) { CSkin * skin=Getobj(); m_bit.SetBitmap(skin->GetBkMap()); Realeaseobj(skin); } FreeLibrary(hMod); } }
相关文章推荐
- 通过DLL路径,实现动态调用动态链接库中指定类的(静态)方法和属性
- day59(5.9)程序报错类型之类中的静态方法不能直接调用动态方法
- C#动态方法调用 提高程序的扩展性
- C#开发学习笔记:动态调用不同程序集中的方法
- jnative在linux下对c程序的动态链接库的调用问题及解决方案
- C++调用Fortran程序----动态链接方式
- 调用动态链接库中的方法。
- Matlab产生可供VC调用的动态链接库的一种方法
- 无法定位程序输入点***于动态链接库QtCore4.dll的解决方法
- java web JNative调用dll动态链接库:和注意方法
- java程序动态加载java源文件并调用类方法
- C#调用C++动态链接库方法介绍
- Qt生成exe错误:无法定位程序输入点_cxa_throw_bad_array_new_length于动态链接库最终解决方法
- 用php的c扩展编程调用 c程序的动态链接库
- dll动态链接库之用类写配置文件和调用判断方法接口的实现中遇到的若干问题
- 创建和调用动态链接库方法
- MFC程序动态链接库缺失的解决方法
- 关于Java调用C写的动态链接库的具体实现方法,自己捉摸了好久,现在算是来造福大众了 T _T
- 动态调用非托管MFC动态链接库中函数的方法封装。
- C++调用Fortran程序----动态链接方式