当#define在使用dll的可执行项目中时,如何检查DLL项目中的#ifdef?

时间:2018-02-09 20:30:05

标签: c++ dll visual-studio-2015

我有一个C ++ Visual Studio 2015项目 1个Windows API可执行文件,1个Windows控制台可执行文件,以及两个可执行文件共享的1个dll。

我在Windows API main.cpp文件中有#define USEWINDOWS

我没有在控制台应用中定义

在DLL中,我想做一个#ifdef USEWINDOWS语句,但#define的范围似乎只对Win32可执行文件有效,而不是在dll中。

如何将此#define扩展到DLL而不影响控制台应用程序中未定义的USEWINDOWS?

由于

1 个答案:

答案 0 :(得分:1)

DLL由两个可执行文件共享,因此只有一个可用的实现,因此您不能使用特定于实现的编译标志。

你需要一个运行时标志,即一些API参数告诉DLL代码可以使用“windows stuff”。 E.g。

api.h

void someAPI(...., bool useWindows);

dll.c

#include "api.h"

void someAPI(...., bool useWindows) {
  ...
  if (useWindows) {
     // do "windows stuff" here
  }
  ...
}

app.c

#include "api.h"
...
someAPI(...., true);

console.c中

#include "api.h"
...
someAPI(...., false);

(未通过编译测试,但你应该得到漂移...)