VC++ 静态DLL模板-全局变量
2013-10-28 10:03
507 查看
1、VS2003新建DLL项目dllTest
2、项目dllTest中添加脚本lib.h,代码如下:
3、项目dllTest中添加脚本lib.cpp,代码如下:
4、项目dllTest中添加脚本lib.def,代码如下:
5、build生成dllTest.dll文件
6、添加检测项目dllCall
7、 添加主程序脚本dllCall.cpp,代码如下:
特别说明:为了验证全局的字符变量,增加了dllGlobalStr相关,设断点跟踪结果在char *sTemp2 = dllGlobalStr;发现指针丢失,而char *sTemp3 = GetGlobalStr();则正常返回。
结论:DLL中的全局变量引用最好还是通过接口定义所控制。
8、Ctrl+F5调试运行结果如下:
2、项目dllTest中添加脚本lib.h,代码如下:
#ifndef LIB_H #define LIB_H extern int dllGlobalVar; extern "C" int GetGlobalVar(); extern "C" void SetGlobalVar(int value); //为了验证全局的字符变量定义导出dllGlobalStr extern char *dllGlobalStr; extern "C" char *GetGlobalStr(); extern "C" void SetGlobalStr(char *value,int iLen); #endif
3、项目dllTest中添加脚本lib.cpp,代码如下:
#include "lib.h" #include <windows.h> #include <string.h> int dllGlobalVar; char *dllGlobalStr; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: dllGlobalVar = 100; break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } int GetGlobalVar() { return dllGlobalVar; } void SetGlobalVar(int value) { dllGlobalVar = value; } char *GetGlobalStr() { return dllGlobalStr; } void SetGlobalStr(char *value,int iLen) { if(dllGlobalStr) delete dllGlobalStr; dllGlobalStr = new char(iLen); strcpy(dllGlobalStr,value); }
4、项目dllTest中添加脚本lib.def,代码如下:
;在DLL中导出变量 LIBRARY "dllTest" EXPORTS dllGlobalVar CONSTANT ;或dllGlobalVar DATA GetGlobalVar SetGlobalVar dllGlobalStr GetGlobalStr SetGlobalStr
5、build生成dllTest.dll文件
6、添加检测项目dllCall
7、 添加主程序脚本dllCall.cpp,代码如下:
特别说明:为了验证全局的字符变量,增加了dllGlobalStr相关,设断点跟踪结果在char *sTemp2 = dllGlobalStr;发现指针丢失,而char *sTemp3 = GetGlobalStr();则正常返回。
结论:DLL中的全局变量引用最好还是通过接口定义所控制。
#include "stdafx.h" #include <windows.h> #include <stdio.h> #pragma comment(lib,"..\\Debug\\dllTest.lib") extern int dllGlobalVar; extern "C" int _declspec(dllimport) GetGlobalVar(); extern "C" void _declspec(dllimport) SetGlobalVar(int value); extern char *dllGlobalStr; extern "C" char _declspec(dllimport) *GetGlobalStr(); extern "C" void _declspec(dllimport) SetGlobalStr(char *value,int iLen); int main(int argc, char* argv[]) { printf("%d\n",GetGlobalVar()); *(int *)dllGlobalVar = 1; //特别要注意的是这种方法导出的并不是变量本身,而是DLL中导出变量的指针,应用程序必 //须通过强制指针转换来使用 printf("%d\n",GetGlobalVar()); SetGlobalVar(20); printf("%d\n",GetGlobalVar()); printf("%s\n",GetGlobalStr()); char *sTemp = new char(6); sTemp = "123434"; SetGlobalStr(sTemp,6); printf("%s\n",GetGlobalStr()); char *sTemp2 = dllGlobalStr;//指针丢失 char *sTemp3 = GetGlobalStr(); return 0; }
8、Ctrl+F5调试运行结果如下:
相关文章推荐
- VC中创建DLL,导出全局变量,函数和类
- VC++ 静态DLL模板-隐式调用
- VC++ 静态DLL模板
- 静态成员函数 全局变量 局部变量 标识符 结构体 函数模板
- 生成/创建 DLL 及调用/引用DLL里的函数、全局变量、静态C++类成员函数等
- VC 在DLL中使用全局变量出现异常问题
- MFC 基础:静态加载DLL ,main()、main全局变量、dllMain()、dllMain全局变量的一些说明
- VC++ 静态DLL模板-导出类
- 解析VC中创建DLL,导出全局变量,函数和类的深入分析
- VC中创建DLL,导出全局变量,函数和类
- VC中创建DLL,导出全局变量,函数和类 (转)
- VC中创建DLL,导出全局变量,函数和类
- VC++中DLL中全局变量的导出和导入
- VC中创建DLL,导出全局变量,函数和类(隐式调用)
- 一个因全局变量引起的DLL崩溃引发的血案
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- 精选:局部变量、全局变量、堆、堆栈、静态和全局
- C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别以及栈与堆的区别
- VC++实现监视系统的键盘操作 创建记录键盘动作的全局钩子DLL