当定义位于使用DLL的可执行项目中时,如何在DLL项目中检查ifdef? 我有一个C++ Visual Studio 2015项目,包括 1个Windows API可执行文件、1个Windows控制台可执行文件和1个由两个可执行文件共享的dll

当定义位于使用DLL的可执行项目中时,如何在DLL项目中检查ifdef? 我有一个C++ Visual Studio 2015项目,包括 1个Windows API可执行文件、1个Windows控制台可执行文件和1个由两个可执行文件共享的dll,c++,dll,visual-studio-2015,C++,Dll,Visual Studio 2015,我在Windows API main.cpp文件中定义了一个USEWINDOWS 我没有在控制台应用程序中定义这个 在DLL中,我希望执行ifdef USEVOWS语句,但定义的范围似乎仅对Win32可执行文件有效,而不是在DLL中 如何将此定义扩展到DLL而不影响console应用程序中未定义的USEWINDOWS 谢谢DLL由两个可执行文件共享,因此只有一个实现可用,因此您不能使用特定于实现的编译标志 您需要一个运行时标志,即一些API参数,它告诉DLL代码可以使用windows的东西。例如

我在Windows API main.cpp文件中定义了一个USEWINDOWS

我没有在控制台应用程序中定义这个

在DLL中,我希望执行ifdef USEVOWS语句,但定义的范围似乎仅对Win32可执行文件有效,而不是在DLL中

如何将此定义扩展到DLL而不影响console应用程序中未定义的USEWINDOWS


谢谢

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

您需要一个运行时标志,即一些API参数,它告诉DLL代码可以使用windows的东西。例如

api.h

dll.c

附录c

控制台c

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

未通过编译进行测试,但您应该得到漂移…

DLL或任何编译代码中都没有持久化的定义。这仅仅是文本替换,由预处理器在代码编译开始之前完成。您能展示一下您的代码吗?最好是以一种特殊的形式。
#include "api.h"

void someAPI(...., bool useWindows) {
  ...
  if (useWindows) {
     // do "windows stuff" here
  }
  ...
}
#include "api.h"
...
someAPI(...., true);
#include "api.h"
...
someAPI(...., false);