私のDLLプロジェクトには、次のファイル構造があります。
// common_header.h //////////////////
extern int CommonVar = 0;
extern bool CommonVar2 = false;
EXPORT_API void ThisFunction();
EXPORT_API bool ThisOtherFunction();
// library_part1.cpp ////////////////
#include "common_header.h"
EXPORT_API void ThisFunction() {
if (CommonVar2) CommonVar++;
}
// library_part2.cpp ////////////////
#include "common_header.h"
EXPORT_API bool ThisOtherFunction() {
if (CommonVar>2) return true;
return false;
}
私が言ったように、私は Microsoft Visual Studio を使用してこれを DLL にビルドします。もちろん、これらの変数がオブジェクト ファイルで 2 回検出されるという事実に関連するリンク エラーが発生します。これは、.cpp ごとに .obj が作成され、各 .cpp に同じヘッダーが含まれているため、変数もエクスポートされるためです。あなたはそれを得る。さて、これに対する解決策があるかどうか疑問に思っているのは、.CPP と extern の両方でこれら 2 つの変数を共通に保つことができるかどうかです (少なくとも、DLL を使用するアプリケーションからそれらを読み取ることができるようにするためです)。もちろん、それらは .obj ファイルで 1 回だけ宣言する必要があります。たぶん、そのためのプリコンパイラコマンドがあります(#pragma once
ヘッダーの場合など)