`
testcs_dn
  • 浏览: 113763 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

纯资源DLL的编写

 
阅读更多

纯资源 DLL是仅包含资源(图标,位图,字符串,声音,视频,对话框等)的 DLL。使用纯资源DLL可以节约可执行文件的大小,可以被所有的应用程序所共享,从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多,使用纯资源 DLL 可用来在多个程序之间共享同一组资源以及对多种语言进行本地化的应用.
要创建纯资源 DLL
1. 应创建一个新的 Win32 DLL(非 MFC)项目VC6环境中: File-> New-> Project-> Win32 Dynamic Link Library
2. 选择an empty project.
3. 完成后,指定 /NOENTRY 链接器选项,/NOENTRY 防止链接器将 _main 引用链接到 DLL 中;。此选项是创建纯资源 DLL 所必需的 用一下几种方法之一 :
a. 在菜单Project->Settings->link中,选中Setting for的All configrations;在common options 中加入 /noentry。
b. 在工程的属性页-链接器-高级-资源仅限于DLL中选择”是 (/NOENTRY)”)。
c. VC++6.0 Project ->Setting ->link:选中Setting for 的 Win32 Debug 并在 progectOptions 中加入 /noentry;
4. 创建一个资源文件 *.RC,添加到资源DLL的工程中去
5. 创建所需资源:
创建一个字符串资源,为IDS_STRING101 其值为101 内容为TEST。
创建一个图标资源,ID为IDI_ICON1
6. 然后添加一个初始化DLL的原文件。
#include <windows.h>

extern “C”
BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID )
{
return 1;
}
7. 编译生成 DLL。
使用纯资源 DLL
使用纯资源 DLL 的应用程序应调用 LoadLibrary 来显式链接到 DLL。若要访问资源,请调用一般函数 FindResource 和 LoadResource,这两个函数对任何类型的资源都有效,或调用下列资源特定的函数之一:

FormatMessage
LoadAccelerators
LoadBitmap
LoadCursor
LoadIcon
LoadMenu
LoadString

对于象对话框、位图、图标这些标准资源,一般不使用FindResource,只有对于非标准资源,才使用FindResource()
使用完资源后,应用程序应调用 FreeLibrary。

在MFC程序中你还可以直接使用AfxSetResourceHandle将它设置为缺省的资源句柄
然后使用MFC的String,BitMap像往常一样Load就可以了


[使用例子]
对于刚才创建的字符串和图标资源,我们使用下面方法来使用字符串资源和图标资源:

  1. //首先在相应的.h文件中设定
  2. #defineIDS_STRING101101
  3. #defineIDI_ICON1102
  4. //装载资源
  5. HINSTANCEhDll;
  6. hDll=LoadLibrary(”ResourceDll.dll”);
  7. //使用字符串资源
  8. charstrRes[MAX_PATH];
  9. LoadString(hDll,IDS_STRING101,strRes,MAX_PATH);
  10. AfxMessageBox(strRes);
  11. //使用图标资源
  12. AfxSetResourceHandle(hDll);
  13. HICONhIcon=::LoadIcon(hDll,MAKEINTRESOURCE(IDI_ICON1));
  14. //使用对话框
  15. 1、如果采用MFC方式,可以使用AfxSetResourceHandle设置资源DLL的句柄,如:
  16. hDll=LoadLibrary(”ResourceDLL.dll”);
  17. if(hDll==NULL)
  18. AfxMessageBox(”Can’tLoadthelibrary”);
  19. elseAfxMessageBox(”success”);
  20. AfxSetResourceHandle(hDLL);
  21. }
  22. 这样以后你再使用CDialog创建对话框时,对话框将来自你的资源DLL,而不是.exe文件。如果你在程序中还要使用.exe中的资源,你需要在AfxSetResourceHandle之前,先使用AfxGetResourceHandle保存当前的资源文件句柄。
  23. 2、SDK方式。你在调用CreateDialog或DialogBox时,它们的第一个参数都是HINSTANCE,就是你LoadLibrary获得的句柄。你不需要使用FindResource,CreateDialog或DialogBox会自动查找资源并加载。
  24. //释放资源
  25. FreeLibrary(hDll);
分享到:
评论

相关推荐

    编写纯资源DLL(图片,图标) vc动态链接库

    vc编写纯资源DLL(图片,图标)

    用VC纯资源DLL制作多语言界面程序

    本文将深入探讨如何使用VC++(Visual C++)来创建一个纯资源DLL(动态链接库),以实现多语言界面。纯资源DLL是一种特殊的DLL,它不包含任何可执行代码,仅包含资源,如字符串、图像等,使得在不同语言环境下可以...

    C++ dll编写入门

    ### C++ DLL编写入门 #### 一、DLL的重要性与特性 动态链接库(Dynamic Link Library,简称DLL)自微软推出16位Windows操作系统以来,便成为Windows生态系统中不可或缺的一部分。DLL文件承载着丰富的函数和数据,...

    visual c++用VC纯资源DLL解决国际化问题_多国语言版i18n

    本篇文章将深入探讨如何利用VC++创建纯资源DLL来实现多国语言版本的应用程序。 首先,我们需要理解什么是DLL(动态链接库)。DLL是一种可执行文件,它包含可由多个程序同时使用的代码和数据。在i18n的背景下,我们...

    纯C下DLL 编写及调用例子

    本示例是关于如何使用纯C语言编写和调用DLL的一个简单教程。 首先,我们来看`dll.c`文件。这个文件用于创建动态链接库。在C语言中,创建DLL的关键在于`__declspec(dllexport)`关键字,它告诉编译器这些函数将被导出...

    C++Dll编写入门

    ### C++ DLL编写入门 #### 一、DLL在Windows操作系统中的重要性 动态链接库(Dynamic Link Library,简称DLL)自微软推出16位的Windows操作系统以来,便成为了Windows架构的核心组成部分。每一个版本的Windows,从...

    纯DOS下实现DLL技术

    总的来说,实现纯DOS下的DLL技术需要对DOS系统有深入的理解,包括内存管理、中断处理、文件操作等基础知识,并且可能需要利用第三方库或自行编写代码来模拟Windows DLL的功能。这个过程中,我们不仅会接触到DOS编程...

    纯C# 托管与非托管DLL注入

    非托管DLL可能包含系统API调用或其他特定于平台的函数,对硬件和系统资源有更直接的访问权限。 二、C# DLL注入的基本原理 在C#中实现DLL注入,主要涉及以下步骤: 1. 创建DLL:首先,你需要编写一个包含注入函数...

    纯C# 托管与非托管DLL注入 FastWin32源码

    标题中的“纯C# 托管与非托管DLL注入 FastWin32源码”涉及到的是在C#编程环境中,如何实现对Windows系统进行DLL注入的技术。DLL注入是一种技术,允许一个进程将动态链接库(DLL)加载到另一个进程中,从而在目标进程...

    纯C编写COM组件中文教程

    在本教程中,我们将深入探讨如何使用纯C语言而不是C++来创建COM组件,这对于那些熟悉C语言但对COM不甚了解的开发者来说是一个宝贵的资源。 首先,我们要理解COM的基本概念。COM是一个二进制接口标准,它定义了一组...

    纯C++写的操作Excel的DLL

    标题中的“纯C++写的操作Excel的DLL”指的是一个动态链接库(DLL)文件,它完全用C++语言编写,其主要功能是处理Microsoft Excel的相关操作。DLL是一种可执行文件,它可以被多个程序同时调用,以实现共享代码和资源...

    易语言DLL注入纯API无模块

    易语言DLL注入纯API无模块是一种技术,它利用Windows API函数在不修改目标程序代码的情况下,将动态链接库(DLL)加载到运行中的进程内存中。这种方法常用于扩展程序功能、调试、监控或恶意软件中。DLL注入可以提高...

    C++中DLL制作过程

    Non-MFC DLL使用纯C语言编写,导出标准C接口,适用于任何语言环境。Regular DLL可以分为静态链接MFC和动态链接MFC两种,前者在编译时连接MFC库,后者在运行时连接。Regular DLL可以导出C函数、C++类或成员函数,调用...

    让易语言的DLL不依赖任何插件都能拥有完整的入口函数(DllMain)

    这可能意味着需要编写纯C或C++代码,并且只使用Windows API进行操作。 另外,易语言的DLL还可以通过提供导出函数来供其他程序调用。这些导出函数可以实现具体的功能,而DllMain则专注于管理DLL的生命周期。导出函数...

    DLL 学习例子,很适合初学者

    它展示了如何使用纯WinAPI编写DLL,不依赖任何特定的类库。这将帮助你理解如何处理Windows消息、线程同步等系统级操作。 最后,`MFCAp`可能是一个MFC应用程序,它使用了前面创建的DLL(如RDLLMFC)。这将帮助你学习...

    用于unity的纯C版LZMA库(包括dll、so和.a))

    本资源提供了一个专为Unity定制的纯C实现的LZMA库,包括了适用于不同平台的动态链接库文件:dll(Windows),so(Android)和.a(iOS)。 1. **LZMA算法详解**: LZMA(Lempel-Ziv-Markov chain Algorithm)是一种...

    免注册调用DLL(纯API).zip_api注册dll_com免注册_免注册_免注册调用_免注册调用DLL的源码模块

    DLL是Windows操作系统中的一种共享库,它包含可由多个程序同时使用的函数和资源。通常,在使用DLL时,需要通过注册表将DLL的相关信息存储到系统中,以便系统能够正确加载和使用这些库。然而,免注册调用DLL的方法则...

    MFCDLL.rar_MFCdll_mfc dll

    2. **MFC常规DLL**:这种DLL通常包含纯MFC类,它们不直接处理Windows消息,而是通过接口函数与应用程序通信。 3. **MFC应用程序DLL**:虽然不常见,但这种DLL可以作为独立的应用程序运行,有自己的主消息循环,可以...

    jacob-1.18-x64.dll文件

    DLL(Dynamic Link Library)是Windows操作系统中的共享库,包含了一组可执行函数和资源,多个程序可以同时使用这些函数和资源,以减少内存占用并提高代码复用性。jacob-1.18-x64.dll是针对64位Windows系统的版本,...

    java调用dll必备jar包

    - 性能:虽然Java调用DLL可以实现特定功能,但与纯Java代码相比,可能会有性能上的损失。 4. **示例**: ```java public class NativeDemo { static { JLibrary.loadLibrary("myDll", true); // 加载名为myDll...

Global site tag (gtag.js) - Google Analytics