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数据共享在不同处定义效果不同..的更多相关文章

  1. Android自己定义效果——随机抽奖

    那天逛android开源码的时候,看到一个wheel menu的自己定义效果,就是类似人家的那种转盘抽奖,把人家project看了下.认为非常好玩.可是不想在他上面改,于是就自己想了一个类似的随即抽奖 ...

  2. C#引用C++开发的DLL

    C#语言使用方便,入门门槛较代,上手容易,并且语法与C,java有很类似的地方,IDE做的也好,通用性好,是MS下一代开发的主要力量.但是其开源代码较少,类库不是十分完美,在架构方面还有一些需要做的工 ...

  3. [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

      这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...

  4. lib和dll文件的区别和联系

    什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态 ...

  5. 获取DLL的文件路径以及调用DLL的文件路径

    如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...

  6. [转载]lib和dll文件的区别和联系

    出处:https://blog.csdn.net/weiaipan1314/article/details/52252478 什么是lib文件,lib和dll的关系如何 (2008-04-18 19: ...

  7. extern 用法,全局变量与头文件(重复定义)

    转自 https://www.cnblogs.com/chengmin/archive/2011/09/26/2192008.html 当你要引用一个全局变量的时候,你就要声明,extern int  ...

  8. 定义与声明、头文件与extern总结

     用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx ...

  9. 定义与声明、头文件与extern总结(转)

    本文转自: http://lpy999.blog.163.com/blog/static/117372061201182051413310/ http://blog.csdn.net/feitianx ...

随机推荐

  1. Java基础(34):Java中基本数据类型的包装类(主要为了不同数据类型之间更方便的进行转换)(Wrapper类)

    相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简单...,为了让基本数 ...

  2. C++多线程调试和测试的注意事项

    在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开 ...

  3. js正则表达式进行格式校验

    今天做了个js正则表达式的练习,利用正则表达式进行注册信息格式验证,注册信息界面如下: 格式要求: 1.学号项不能为空,必须为纯数字,不能与数据库中的重复,正则表达式/^\d+$/g: 2.姓名项不能 ...

  4. demo03linearlayoutdemo;

    package com.example.demo03linearlayoutdemo; import android.os.Bundle; import android.app.Activity; i ...

  5. -XX:+PrintHeapAtGC 每次一次GC后,都打印堆信息

    -XX:+PrintHeapAtGC每次一次GC后,都打印堆信息 {Heap before GC invocations=0 (full 0): def new generation   total ...

  6. Oracle角色

    一 .3种标准角色 Qracle为了兼容以前的版本,提供了三种标准的角色(role):CONNECT.RESOURCE和DBA. 1. CONNECT Role(连接角色) 临时用户,特别是那些不需要 ...

  7. 在TVideoGrabber中如何在预览时设置相机属性

    在使用TVideoGrabber进行预览时,如何设置相机的属性呢?比如曝光.对比度.亮度等. 下面来看一下,如何通过编程来调整这些设置: ——通过指定VideoDevice属性(在VideoDevic ...

  8. 改Bug总结

    [1]屏蔽取舍法 屏蔽取舍,即所谓与问题无关的前后“语境”完全可以忽略,首先屏蔽掉,再根据问题复现路径查看问题发生的区间,然后逐近锁定“病灶”,确定需要修改的目标. [2]追溯原形法 追溯原形,即需要 ...

  9. Linux命令学习手册-printf命令(转)

    分类: LINUX 参考资料:http://sns.linuxpk.com/space-566-do-blog-id-15819.html printf FORMAT [ARGUMENT]... pr ...

  10. 关于ADO.NET@SQL Server&SqlDataReader

    先说基础的,说基础的明白了再深的也是一样的.SQL是关系型数据库,所以就决定了对其操作的时候ADO的一些类要相互联系,Connection 类Command对象(ExecuteReader()方法.E ...