vs 2008 mfc 编写资源dll

来源:互联网 发布:javascript submit 编辑:程序博客网 时间:2024/05/16 23:48

网上找了几个例子,说的都不够清晰,干脆自己动手写一个,整理出来留给后来人借阅


首先文件->新建->项目,选中mfc->mfc dll,名字zydll,直接点击完成,创建一个(在共享DLL中使用mfc)的dll

起初我选择在静态库中使用,频繁提示错误,干脆修改成共享dll,问题解决。我们继续

切换到资源标签,添加资源->string table 点击新建,修改标题为test,修改值为2000

接着右键->添加资源->导入->图片资源

这里重头戏即将开始


工程上右键->属性->连接器->无入口点选择(是/NOENTRY)

修改随机基址为:禁止映像随机化(/DYNAMICBASE:NO)

修改数据执行保护(DEP)为默认值


点击确定,现在就可以编译dll了

1>------ 已启动全部重新生成: 项目: zydll, 配置: Debug Win32 ------1>正在删除项目“zydll”(配置“Debug|Win32”)的中间文件和输出文件1>正在编译...1>stdafx.cpp1>正在编译...1>zydll.cpp1>正在编译资源...1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.11>Copyright (C) Microsoft Corporation.  All rights reserved.1>正在编译资源清单...1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.11>Copyright (C) Microsoft Corporation.  All rights reserved.1>正在链接...1>   正在创建库 C:\VC\VS9\zydll\Debug\zydll.lib 和对象 C:\VC\VS9\zydll\Debug\zydll.exp1>atlsd.lib(Externs.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>mfcs90ud.lib(dllmodul.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>atlsd.lib(atltrace.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>zydll.obj : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>stdafx.obj : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>mfcs90ud.lib(nolib.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>mfcs90ud.lib(dllmodul.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>mfcs90ud.lib(stdafx.obj) : warning LNK4210: 存在 .CRT 节;可能有未处理的静态初始值设定项或结束符1>正在嵌入清单...1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.11>Copyright (C) Microsoft Corporation.  All rights reserved.1>生成日志保存在“file://c:\VC\VS9\zydll\Debug\BuildLog.htm”1>zydll - 0 个错误,8 个警告========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

会出现一坨警告,不用理会它们

调用资源dll方法


新建一个disable工程,工程名为testdll

在对话框上添加一个Picture Control控件,修改ID号为IDC_TESTZYDLL

并修改type为Bitmap

在Oninitdialog函数中编写代码


HMODULE hModule = LoadLibrary("zydll.dll");if (hModule == NULL){MessageBox("加载资源文件失败!");return true;}char buffer[255];memset(buffer,0,sizeof(buffer));LoadString(hModule,2000,buffer,sizeof(buffer));HBITMAP hBitmap = LoadBitmap(hModule,MAKEINTRESOURCE(2001));if (hBitmap == NULL){      MessageBox("加载图片资源失败!");return true;}((CStatic*)GetDlgItem(IDC_TESTZYDLL))->SetBitmap(hBitmap);FreeLibrary(hModule);

编译执行,图片就被加载成功鸟~~

0 0
原创粉丝点击