DLL数据共享在不同处定义效果不同..
DLL头文件:
#ifndef _DLL_SAMPLE_H #define _DLL_SAMPLE_H #pragma data_seg("ShareReadAndWrite") int DLLData = 0; #pragma data_seg() #pragma comment(linker,"/SECTION:ShareReadAndWrite,RWS") //如果定义了C++编译器,那么声明为C链接方式, //否则编译后的函数名为?TestDLL@@YAXXZ,而并不是TestDLL //则不能通过GetProcAddress()获取函数名,因为无法知道DLL编译后的函数名 //******* //如果编译时用的C方式导出函数,则在导入时也要使用C方式(在应用程序#define _cplusplus) //不然会找不到函数 //******* #ifdef _cplusplus extern "C" { #endif //通过宏来控制是导入还是导出 #ifdef _DLL_SAMPLE #define DLL_SAMPLE_API __declspec(dllexport) #else #define DLL_SAMPLE_API __declspec(dllimport) #endif // DLL_SAMPLE_API extern int DLLData; #undef DLL_SAMPLE_API #ifdef _cplusplus } #endif #endif
DLL实现
#include<objbase.h> #define _DLL_SAMPLE //声明是导出 #define _cplusplus //声明为C编译方式 #ifndef _DLL_SAMPLE_H #include "DLLSample.h" #endif //#pragma data_seg("ShareReadAndWrite") //int DLLData = 0; //#pragma data_seg() // //#pragma comment(linker,"/SECTION:ShareReadAndWrite,RWS") //APIENTRY声明DLL函数入口点 BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
应用程序Aapp
#include<iostream> #define _cplusplus #include"DLLSample.h" using namespace std; #pragma comment(lib,"2014_4_9_DLL.lib") int main() { cout<<"DLLData:"<<DLLData<<endl; DLLData = 635; system("pause"); return 0; }
应用程序Bapp
#include<iostream> #define _cplusplus #include"DLLSample.h" using namespace std; #pragma comment(lib,"2014_4_9_DLL.lib") int main() { cout<<"DLLData:"<<DLLData<<endl; DLLData = 888; system("pause"); return 0; }
Aapp、Bapp分别代表不同的应用程序
Aapp A1,A2;
Bapp B1,B2;
如果在头文件中定义数据共享
则只能A1和A2共享DLLData,B1和B2共享DLLData
如果在DLL实现部分定义数据共享(头文件需要变量导出声明)
则A1,A2,B1,B2可以共享DLLData
DLL数据共享在不同处定义效果不同..的更多相关文章
- Android自己定义效果——随机抽奖
那天逛android开源码的时候,看到一个wheel menu的自己定义效果,就是类似人家的那种转盘抽奖,把人家project看了下.认为非常好玩.可是不想在他上面改,于是就自己想了一个类似的随即抽奖 ...
- C#引用C++开发的DLL
C#语言使用方便,入门门槛较代,上手容易,并且语法与C,java有很类似的地方,IDE做的也好,通用性好,是MS下一代开发的主要力量.但是其开源代码较少,类库不是十分完美,在架构方面还有一些需要做的工 ...
- [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)
这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...
- lib和dll文件的区别和联系
什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37) (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态 ...
- 获取DLL的文件路径以及调用DLL的文件路径
如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...
- [转载]lib和dll文件的区别和联系
出处:https://blog.csdn.net/weiaipan1314/article/details/52252478 什么是lib文件,lib和dll的关系如何 (2008-04-18 19: ...
- extern 用法,全局变量与头文件(重复定义)
转自 https://www.cnblogs.com/chengmin/archive/2011/09/26/2192008.html 当你要引用一个全局变量的时候,你就要声明,extern int ...
- 定义与声明、头文件与extern总结
用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx ...
- 定义与声明、头文件与extern总结(转)
本文转自: http://lpy999.blog.163.com/blog/static/117372061201182051413310/ http://blog.csdn.net/feitianx ...
随机推荐
- C#: MessageBox
系统学习下Form里用到最多的MessageBox MessageBox有21个重载的Show函数...都是返回DialogResult public enum DialogResult { None ...
- length() 和 size()
length() 和 size() ==>length() 是针对数组字符串说的 size() 是针对 泛型集合的
- start.s 解析(一)
可以参考 : http://blog.csdn.net/bluesummerg/article/details/5940452 (强大的反汇编) http://www.cnblogs.com/yanh ...
- VPN服务器的配置与应用
实验场景 通过将Linux配置VPN服务器允许远程计算机能够访问内网. 我的目的: 现在需要开发第三方接口,而第三方接口有服务器IP地址鉴权配置,这样在本地开发出来的程序每次都要发布到服务器上测试 ...
- cmd进入某个目录
love you my pig java枚举类 cmd进入某个目录 2011-04-06 15:49:38| 分类: 小知识 | 标签: |字号大中小 订阅 1.开始->运行->C ...
- 02---Net基础加强
将普通日期格式:“2014年7月8日”转换成汉字日期格式:“二零一四年七月八日”.(暂时不考虑10日,13日,23日) class Program { static void Main(string[ ...
- sql 索引创建
--格式 --CREATE [索引类型] INDEX 索引名称--ON 表名(列名)--WITH FILLFACTOR = 填充因子值0~100--GO ----------------------- ...
- mongo导出导入
导出例子: mongoexport -d test -c test -q '{sn:1}' -o test.dat 导入例子: mongoimport -d test -c students stud ...
- Html基础知识讲解
Html基础知识讲解 <title>淄博汉企</title> </head> <body bgcolor="#66FFCC" topmar ...
- [php] 判断当前运行模式
//判断是否cgi模式 define('IS_CGI',substr(PHP_SAPI, 0,3)=='cgi' ? 1 : 0 ); //判断操作系统是否为windows define('IS_WI ...