DLL导出全局类实例,供DLL与EXE使用

231 阅读1分钟

功能描述

​ Lib1为DLL动态库1,Lib1中包含一个全局类对象实例A,希望exe及其它DLL动态库模块可共用该实例A,此实例A为全局共享。

关键代码实现

​ IDE:VisualStudio 2015

​ 框架:MFC(其它类似)

​ Lib1中COne类代码:

//Lib1中的实现
//COne类.h

#pragma once

class AFX_EXT_CLASS COne
{
public:
	~COne();
	COne();
public:
	int a;
};
__declspec(dllimport) extern COne one;			//全局类实例,声明
//Lib1中实现
//COne类.cpp

#include "stdafx.h"
#include "One.h"
#include <iostream>
using namespace std;

COne one;			//全局类变量 定义

COne::COne()
{
	a = 100;
	cout << "COne 初始化" << endl;
}

COne::~COne()
{
}

​ 公共h.h:用于引入One.h文件

#pragma once
#include "../MFCLibrary1/One.h"

​ Lib2中代码实现:定义CTwo类,该中使用类实例:one

//CTwo.h
#pragma once
class AFX_EXT_CLASS CTwo
{
public:
	CTwo();
	~CTwo();
	int get();
};
//CTwo.cpp
#include "stdafx.h"
#include "Two.h"
#include "../include/h.h"
#include "../MFCLibrary1/One.h"

CTwo::CTwo()
{
}

CTwo::~CTwo()
{
}

int CTwo::get()
{
	one.a += 1000;
	return one.a;
}

​ EXE中调用

// TODO: 在此处为应用程序的行为编写代码。
int ret1 = one.a;
CTwo two;
int ret2 = two.get();
int ret3 = two.get();
int ret4 = one.a;
system("pause");

​ 执行结果:COne仅实例一次!:smile::smiley:

COne 初始化

​ 示例代码:wwa.lanzous.com/iAlACokigcf