我有一个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?
由于
答案 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);
(未通过编译测试,但你应该得到漂移...)