在DLL中资源切换的两中方法

方法一:

AFX_MANAGE_STATE(AfxGetAppModuleState());// MFC扩展dll
AFX_MANAGE_STATE( AfxGetStaticModuleState());//常规Regular dll
方法二:
HMODULE hDLL=GetModuleHandle("SourceChange.dll");
 HINSTANCE hEXE=AfxGetResourceHandle();
 AfxSetResourceHandle((HINSTANCE)hDLL); //设定资源模块句柄,指定为DLL模块。
...// 资源的加载
 AfxSetResourceHandle(hEXE); // 切换到EXE资源

【注意1】;
有些资源加载函数需要指定资源句柄,请注意使用AfxGetInstanceHandle()、AfxGetResourceHandle()的使用
如:
LoadCursor()、LoadImage()等等。
【注意2】;
GetModuleHandle()、AfxGetInstanceHandle()和CWinApp->m_hInstance的区别:
1.GetModuleHandle(LPCTSTR lpModuleName)
  If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).
  如果参数为空,那么获取的就是调用这个DLL 的exe的 句柄,也即application句柄,而不是DLL的句柄

  如果要获得当前DLL的句柄,要传入DLL的名称即可。

2.AfxGetInstanceHandle()
   An HINSTANCE to the current instance of the application. If called from within a DLL linked with the USRDLL version of MFC, an HINSTANCE to the DLL is returned.
   返回的是一个application的句柄,但是如果这个函数是从一个MFC的USRDLL版本DLL的内部被调用,那么返回的就是这个DLL的句柄

3.CWinApp->m_hInstance
  The m_hInstance data member is a handle to the current instance of the application running under Windows. This is returned by the global function AfxGetInstanceHandle. m_hInstance is a public variable of type HINSTANCE.
  因为它是从 AfxGetInstanceHandle()返回来获得的,所以跟AfxGetInstanceHandle()的返回值一样。
时间: 2024-10-09 00:01:49

在DLL中资源切换的两中方法的相关文章

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

MySQL中删除数据的两种方法

转自:http://blog.csdn.net/apache6/article/details/2778878 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句. DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNCATE TABLE将删除表中的所有记录.因此,DELETE语句更灵活. 如果要清空表中的所有记录,可以使用下面的两种方法: DELETE FROM table1 TRUNCATE TABLE table1 其

在Word中去除超链接的两种方法

本文来自e良师益友网 不少朋友都有这样一个疑问:在Word中输入网站地址,回车之后,先前输入的地址就自动转变为了蓝色的超链接,如果我们不想这样,该如何设置呢?下面,简单的介绍两种方法给大家参考. 方法一:运用自动更正选项 1.启动Word2003,在空白处直接输入网站地址之后,自动变为蓝色的超链接形式,我们仔细发现,首字母下有一道横线,光标移动至此,显示自动更正选项. 2.单击自动更正选项,有三个可供选择的,选择控制自动更正选项. 3.在键入时自动套用格式选项卡中,取消勾选Internet及网络

python中执行shell的两种方法总结

这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包均是Python现有的内置模块.需要的朋友可以参考借鉴,下面来一起看看吧. 一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: 该命令目前已经废弃,被s

WPF程序将DLL嵌入到EXE的两种方法

WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了>可以参看地下地址(两篇是一样的): 开源中国 http://my.oschina.net/chinesedragon/blog/308336 CNBLOGS http://www.cnblogs.com/luoshupeng/p/3946635.html 引言 前几一写了一个小工具----<Vi

Struts2中使用Session的两种方法

在Struts2里,如果需要在Action中使用到session,可以使用下面两种方式: 通过ActionContext 类中的方法getSession得到 Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作 下面先看一个采用第一种方式,在action中得到session的例子 public class SessionTestAction extends ActionSupport { public Stri

Endnote在latex中的应用的两种方法

从endnote中向latex文档批量插入参考文献的两种方法 一.若是latex模板中参考文献编写的命令是: \begin{thebibliography} \bibitem{lab1}LIU M L, ZHANG Y H,ZHOU X H et al. Phys. Rev. C, 2004, {\bf 70}: 14---34 ... \end{thebibliography} 我们可以按照bibitem行的格式在endnote中编写相应的outstyle,然后即可批量从endnote中输出参

Java中Arrays类的两个方法:deepEquals和equals

deepEquals和equals是Java中Arrays类的两个静态方法,可是它们之间有什么样的区别呢? 代码一. import java.util.Arrays; public class Test { public static void main(String[] args) { String[][] name1 = {{ "G","a","o" },{ "H","u","a",

从列表中提取数据的两种方法

从列表中提取数据除了循环外还有两种方法:过滤,列表解析式: #!/usr/bin/env python #coding:utf-8 #@Author:Andy # 生成一个随机列表:并选出其中的两大于零的数 from random import randint data = [randint(-10, 10) for i in range(1, 10)] print(data) # method 1 print("filter method:", list(filter(lambda