C++ 在静态库中定义_windl的效果

C++ 在静态库中定义_windl的效果,c++,c,visual-studio,winapi,C++,C,Visual Studio,Winapi,出于我不打算深入研究的原因,但可以归结为复杂的.props链,我有许多项目(都是用C++编译器编译的C),在DLL解决方案中,仍然构建静态库,但定义\u Windell。这是可以解决的,但并不容易 这些项目都不会也永远不会使用MFC——或者类似的东西——但有一个项目——一个操作系统抽象层——确实包含用于套接字、互斥体和线程的Windows.h 因此,编译过程中不会出现错误或警告,应用程序似乎运行良好,但它是一个古老的野兽,有数百个小功能,没有单元测试:) 我的问题是:我是否需要修复这些静态库以不

出于我不打算深入研究的原因,但可以归结为复杂的.props链,我有许多项目(都是用
C++
编译器编译的
C
),在
DLL
解决方案中,仍然构建静态库,但定义
\u Windell
。这是可以解决的,但并不容易

这些项目都不会也永远不会使用MFC——或者类似的东西——但有一个项目——一个操作系统抽象层——确实包含用于套接字、互斥体和线程的Windows.h

因此,编译过程中不会出现错误或警告,应用程序似乎运行良好,但它是一个古老的野兽,有数百个小功能,没有单元测试:)

我的问题是:我是否需要修复这些静态库以不定义Windl

编辑:

虽然我想我有我的答案,但更多的背景似乎是必要的:


定义它的属性表是我们的属性表,它是一个相对复杂的系统的一部分,允许我们以相对较少的痛苦构建Release/Debug/Lib/Dll Arm/WinCE/x86/x64 Clang/MSVC,但它偶尔也会有问题。属性表是分层的,我处理的项目和我不想接触的项目都使用属性表。

我认为\u Windell是编译器为您定义的东西,告诉您您正在编译为DLL。我不认为它会改变任何东西;您的代码必须通过#ifdef进行实际测试。@JesperJuhl我不想触发C语言:)。另外,它是一个操作系统抽象层。把踏板踩到金属板上,所有的。@zzxyz.-我不明白你的意思<代码> 和<代码> <代码>是C++标题,而不是C标题。你在说什么?@JesperJuhl他们都是C语言的人,我要把STL头插入他们的代码中?我真的不明白有什么是不能避免的,它会导致一个问题。它并不像乔纳森猜测的那样是一个预定义的宏。这来自“Windows动态链接库”属性页。使用“视图>(其他窗口)>属性管理器”可以查看该视图。这并不意味着“这个项目构建了一个将在Windows上使用的DLL”。在静态库项目中定义它肯定会让您失去优雅感,但您可能会侥幸逃脱。删除属性表是明智的。