- 浏览: 1524430 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
DLL定义的全局变量可以被调用进程访问;DLL也可以访问调用进程的全局数据,我们来看看在应用工程中引用DLL中变量的例子(单击此处下载本工程附件
)。
/* 文件名:lib.h */
#ifndef LIB_H
#define LIB_H
extern int dllGlobalVar;
#endif
/* 文件名:lib.cpp */
#include "lib.h"
#include <windows.h>
int dllGlobalVar;
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
dllGlobalVar = 100; //在dll被加载时,赋全局变量为100
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
;文件名:lib.def
;在DLL中导出变量
LIBRARY "dllTest"
EXPORTS
dllGlobalVar CONSTANT
;或dllGlobalVar DATA
GetGlobalVar
从lib.h和lib.cpp中可以看出,全局变量在DLL中的定义和使用方法与一般的程序设计是一样的。若要导出某全局变量,我们需要在.def文件的EXPORTS后添加:
变量名 CONSTANT //过时的方法
或
变量名 DATA //VC++提示的新方法
在主函数中引用DLL中定义的全局变量:
#include <stdio.h>
#pragma comment(lib,"dllTest.lib")
extern int dllGlobalVar;
int main(int argc, char *argv[])
{
printf("%d ", *(int*)dllGlobalVar);
*(int*)dllGlobalVar = 1;
printf("%d ", *(int*)dllGlobalVar);
return 0;
}
特别要注意的是用extern int
dllGlobalVar声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须通过强制指针转换来使用DLL中的全局变量。这一点,从*
(int*)dllGlobalVar可以看出。因此在采用这种方式引用DLL全局变量时,千万不要进行这样的赋值操作:
dllGlobalVar = 1;
其结果是dllGlobalVar指针的内容发生变化,程序中以后再也引用不到DLL中的全局变量了。
在应用工程中引用DLL中全局变量的一个更好方法是:
#include <stdio.h>
#pragma comment(lib,"dllTest.lib")
extern int _declspec(dllimport) dllGlobalVar; //用_declspec(dllimport)导入
int main(int argc, char *argv[])
{
printf("%d ", dllGlobalVar);
dllGlobalVar = 1; //这里就可以直接使用, 无须进行强制指针转换
printf("%d ", dllGlobalVar);
return 0;
}
通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,笔者建议在一切可能的情况下都使用这种方式。
发表评论
-
数据结构与算法分析(C语言描述)源代码与答案
2009-12-14 11:44 6714数据结构与算法分析(C语言描述)(第二版) Mark A ... -
A new Michael Jackson song
2009-10-12 16:48 948<!-- [if gte mso 9]><x ... -
makefile 大全
2009-02-24 07:37 1178http://chenl.blogbus.com/logs ... -
Linux_Unix环境下的Make和Makefile详解
2009-02-24 07:35 1319无论是在 Linux 还是在 U ... -
C++的11个注意要点
2009-02-24 07:33 1029C++ 的 11 个注意要点 ... -
运用autoconf和automake自动生成Makefile实例讲解
2009-02-24 07:30 4067运用 autoconf 和 automake ... -
makefile详解(6)
2009-02-24 07:23 1783makefile 详解( 6 ) ... -
makefile详解(5)
2009-02-24 07:22 1674<!-- --><!-- -->& ... -
makefile详解(4)
2009-02-24 07:21 1421<!-- --><!-- -->& ... -
makefile详解(3)
2009-02-24 07:20 1636<!-- --><!-- --> & ... -
makefile详解(2)
2009-02-24 07:19 1331<!-- --><!-- --> & ... -
makefile详解(1)
2009-02-24 07:18 1505makefile 详解 ... -
VC++动态链接库(DLL)编程深入浅出(二) Win32 Dynamic-Link Library
2008-08-19 14:23 8023上节给大家介绍了静态链接库与库的调试与查看( 动态链 ... -
VC++动态链接库(DLL)编程深入浅出(一) Win32 Static Library
2008-08-19 14:13 7115http://www.pconline.com.cn/pced ... -
VC++常用数据类型及其操作详解
2008-08-18 23:43 1383http://blog.csdn.net/flxyzsby/a ... -
VC++数据类型转换大全
2008-08-18 23:25 64097int i = 100; long l = 2001; f ... -
DLL导出类
2008-08-18 16:20 2627DLL中定义的类可以在应用工程中使用。 下面的例子里,我 ... -
MFC规则DLL 概述
2008-08-18 16:19 2820MFC规则DLL的概念体现在两方面: (1) 它是MFC ... -
MFC规则DLL的创建
2008-08-18 16:18 1852我们来一步步讲述使用MFC向导创建MFC规则DLL的过程,首先 ... -
MFC规则DLL 简单的例子
2008-08-18 16:16 3959这个DLL的例子(属于静态链接到MFC 的规则DLL)中提供了 ...
相关推荐
// DLL导出变量 __declspec(dllexport) extern int g_GlobalValue; // DLL实现 int g_GlobalValue = 0; // 客户端程序 extern __declspec(dllimport) int g_GlobalValue; // 导入变量 ``` ### 静态和动态方法 在...
本文将深入探讨如何在DLL中导出变量,并创建一个测试程序来验证其正确性。我们以标题中的"mydll2"为例,它是一个可能包含导出变量的DLL。 首先,让我们了解如何在DLL中导出变量。导出变量的过程通常涉及以下几个...
2.6、DLL导出变量 2.7、DLL导出类 第三章:VC++动态链接库编程之MFC规则DLL 5.1 概述 5.2 MFC规则DLL的创建 5.3 一个简单的MFC规则DLL 5.4 MFC规则DLL的调用 5.5 共享MFC DLL的规则DLL的模块切换 第四章:VC++动态...
4.6 DLL导出变量 4.7 DLL导出类 5. MFC规则DLL 5.1 概述 5.2 MFC规则DLL的创建 5.3 一个简单的MFC规则DLL 5.4 MFC规则DLL的调用 5.5 共享MFC DLL的规则DLL的模块切换 6.1 MFC扩展DLL的创建 6.2 MFC扩展DLL的调用 6.3...
"MFC的DLL导出类" 本文主要介绍了如何使用MFC扩展DLL来导出类的方法,包括创建MFC扩展DLL的步骤、建立输出类、创建窗口类DLL、编译DLL、建立DLL测试程序等。 MFC扩展DLL是指使用MFC框架创建的动态链接库,可以提供...
### DLL导出与导入宏定义使用总结 #### 引言 动态链接库(Dynamic Link Library,简称DLL)是Windows系统中的一个重要组成部分,广泛应用于软件开发过程中。通过DLL,可以实现代码及数据的共享,提高软件的运行...
非MFC DLL 7 4.1一个简单的DLL 7 4.2 声明导出函数 11 4.3 DLL的调用方式 12 4.4 DllMain函数 14 4.5 __stdcall约定 18 4.6 DLL导出变量 19 4.7 DLL导出类 23 5. MFC规则DLL 32...
"易语言输出DLL导出表源码.7z" 是一个压缩包,包含有关如何在易语言中创建动态链接库(DLL)并输出其导出表的源代码。DLL是Windows操作系统中的一个重要组件,它能实现代码和资源的共享,减少内存占用,提高程序运行...
在标题中提到的"dll导出lib必备神器组合",实际上是指利用两个工具——`pexports`和`lib`,来实现DLL到静态库的转换。`pexports`是一个命令行工具,用于从DLL中导出函数定义,生成.DEF文件。`.DEF`文件是Windows下的...
本文将详细讲解如何在MFC环境中创建一个扩展DLL,并导出一个对话框类,以便在其他应用程序中使用。我们将遵循以下步骤进行操作: 1. **创建MFC扩展DLL项目** 首先,我们需要在Visual Studio中创建一个新的MFC扩展...
"编写DLL导出类"是创建DLL时的关键步骤,它涉及到如何设计和实现DLL的核心功能,并提供一个清晰、稳定的接口供其他程序调用。下面我们将深入探讨这个主题。 1. **DLL的基础概念** - DLL是Windows操作系统中的一个...
《dllexp DLL导出函数查看器:深入理解DLL与导出函数》 在Windows操作系统中,DLL(Dynamic Link Library)是一种重要的共享库机制,它允许多个程序共享同一段代码和数据,从而节省内存资源、简化软件开发和维护。...
4. **dll编程深入浅出之4.7 DLL导出类代码.zip** 和 **dll编程深入浅出之4.6 DLL导出变量代码.zip**:这两个部分分别展示了如何在DLL中导出类和变量。导出类允许其他程序实例化DLL中的对象,而导出变量则让其他程序...
C++从DLL导出类涉及到两个主要步骤:定义导出标志和编写DLL及客户端代码。 1. 定义导出标志: 在C++中,我们需要为DLL接口定义一个特定的宏,用于标记哪些是对外可见的。通常有两种方法: - 使用`__declspec(dll...
首先,我们要了解什么是DLL导出函数。DLL导出函数是DLL文件中可供其他应用程序或DLL调用的函数。当开发DLL时,我们需要明确哪些函数或变量是对外公开的,这通常通过在源代码中使用`__declspec(dllexport)`关键字或者...
可以通过设置环境变量或使用`SetDllDirectory` API来指示系统搜索DLL的路径。另外,需要使用`LoadLibrary`函数加载DLL,并使用`GetProcAddress`获取函数地址。 5. **卸载DLL**:当不再需要DLL时,应使用`...
《深入理解DLL导出与查看:以HA-eXeScope650-moming为例》 在计算机编程领域,动态链接库(DLL)是Windows操作系统中一个重要的组件,它允许多个程序共享同一段代码和数据,从而节省内存并提高效率。然而,对DLL的...
##### 4.6 DLL导出变量 除了导出函数外,还可以导出全局变量或静态变量。例如: ```cpp extern "C" __declspec(dllexport) int g_myVar = 0; ``` ##### 4.7 DLL导出类 导出类时需要注意构造函数和析构函数的处理...