Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744577
  • 博文数量: 263
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(263)

文章存档

2020年(12)

2019年(2)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: Windows平台

2014-04-03 09:43:02

目的:将图片,图标等存入 DLL中,然后在其他程序中调用
本文示例是将bitmap文件添加到dll中然后在dll中调用

第一步:建立DLL文件
步骤:
1 点击菜单-文件-新建项目-项目类型选择Win32-模版选择Win32项目。
2 在向导中应用程序类型选择DLL,附加选项选择空

3添加资源文件,在解决方案中右键点击资源文件,添加-资源,在添加资源对话框中,新建或者添加想要添加的文件
4添加之后编译出现如下错误
error LNK2001: 无法解析的外部符号 

解决方法:
 点击菜单上的项目 -属性- 配置属性 -高级-无入口点 选择"是(/NOENTRY)"
 PS: VS2010的这个选顶在 菜单上的项目 -属性- 配置属性 - 链接器  -高级-无入口点 选择"是(/NOENTRY)"
5 编译生成DLL文件
在这里并不需要添加WinMain函数之后编译。生成的DLL的文件的名字是mydll.dll

第二步:在程序中调用
1新建一个对话框工程DLLTest
2在DLLTest 工程中的resource.h文件中,添加dll中图片文件的ID
例如#define IDB_BITMAP_BACKGROUND       7777 //7777是我自定义的ID

3为按钮添加图片,设置按钮的Bitmap属性为true,为按钮添加一个控件变量m_Button_Test

为按钮事件添加如下代码
HMODULE hModule = LoadLibrary(TEXT("mydll.dll"));
 if(!hModule)
  return;
HBITMAP    hBitmap =  LoadBitmap(hModule,MAKEINTRESOURCE(IDB_BITMAP_BACKGROUND));
m_Button_Test.SetBitmap(hBitmap);
FreeLibrary(hModule);
4编译生成DLLTest.exe文件,运行DLLTest.exe,点击按钮按钮就载入了图片


mydll项目在VC++2005 win32项目下调试通过
DLLTest在VC++2005 MFC Dialog Unicode下调试通过

 

 

 

另外,下面是已经试验成功的把swf视频从资源创建文件的过程:

 

1、加载 swf 文件到资源,是自定义资源,命名时要加双引号,比如下面的代码的自定义资源名称为: “swf” 

 

2、在初始化函数里添加如下代码,即可以指定位置创建一个 swf 文件:

CString strType = L"swf";

LPCTSTR Name = MAKEINTRESOURCE(IDR_SWF1);

HRSRC res = FindResource(NULL,Name,strType);

HGLOBAL gl = LoadResource(NULL,res);

LPVOID lp = LockResource(gl);

CString strFileName = L"C:\\Temp.swf";

HANDLE fp = CreateFile(strFileName,

GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);

DWORD a;

if(!WriteFile(fp,lp,SizeofResource(NULL,res),&a,NULL))

return FALSE;

 

CloseHandle(fp);

FreeResource(gl);

转:

阅读(2925) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~