應該提供窗口下工作:
- 你一直使用
__declspec(dllexport)
出口和__declspec(dllimport)
進口
- 的
Options::get()
的實施是在CPP文件移動,使其只在DLL中存在。
下面是一個例子:
options.dll建立與定義OPTIONS_EXPORT
符號:
options.h:
#pragma once
#ifdef OPTIONS_EXPORTS
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
class DLLAPI Options
{
private:
Options()
{};
Options(Options const&);
void operator=(Options const&);
public:
static Options& get();
int val;
};
options.cpp:
#include "Options.h"
Options& Options::get()
{
static Options INSTANCE;
return INSTANCE;
}
使用options.dll的虛擬c.dll與一起構建定義並與options.lib
聯符號:
c.h:
#pragma once
#ifdef C_EXPORTS
#define dll __declspec(dllexport)
#else
#define dll __declspec(dllimport)
#endif
#include "../a/options.h"
namespace C {
dll Options& relay();
};
c.cpp:
#include "c.h"
Options& C::relay() {
Options& opt = Options::get();
return opt;
}
和最小主既options.dll和c相連。DLL:如預期
#include <iostream>
#include "../a/options.h"
#include "../c/c.h"
int main() {
Options& o1 = Options::get();
o1.val = 12;
Options& o2 = C::relay();
std::cout << ((o1.val == o2.val) ? "Ok" : "Ko") << std::endl;
return 0;
}
輸出:Ok
所以跨多個應用程序實例的單一單? – Downvoter
@cad沒有應用程序實例,但一個應用程序和共享庫...(模塊) – Cynede