0

我的 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 中,当然,我得到了与这些变量在目标文件中出现两次的事实相关的链接错误。这是因为它为每个 .cpp 创建了一个 .obj,并且每个 .cpp 如何包含相同的标头,它还导出变量。你懂了。现在,我想知道是否有解决方案,这样我就可以为 .CPP 和 extern 保留这两个变量(我的意思是,至少能够从使用 DLL 的应用程序中读取它们)?当然,它们只能在 .obj 文件中声明一次。也许有一些预编译器命令(比如#pragma once标题)

4

1 回答 1

0

我找到了。这是解决方案:

// common_header.h //////////////////

extern EXPORT_API int  CommonVar;
extern EXPORT_API bool CommonVar2;

EXPORT_API void ThisFunction();
EXPORT_API bool ThisOtherFunction();


// library_part1.cpp ////////////////
#include "common_header.h"

EXPORT_API int  CommonVar = 0;
EXPORT_API bool CommonVar2 = false;

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;
}
于 2013-03-28T18:34:37.740 回答