包括Boost网络库使得Windows.h函数未定义

时间:2016-07-05 10:29:16

标签: c++ visual-studio winapi boost boost-asio

我正在尝试使用boost

我的包含如下:

#include <boost/asio.hpp>
#include <Windows.h>

我正试图测试这个电话:

ShellExecute(NULL, "open", "C:/local/test.txt", NULL, NULL, SW_SHOWNORMAL);

当我编译时,我得到“ShellExecute未定义”。如果我移动Windows.h包括在boost include之上,它会被编译器拾取,但我得到了大量的Winsock错误。我正在使用VS 2015。

这只发生在网络库中 - 我之前一直在使用boost文件系统,没有任何问题。

Windows.h

提供的所有功能都会发生这种情况

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:2)

在包含 Windows.h 之前,您需要#define WIN32_LEAN_AND_MEAN,以防止它在Windows套接字1标头中拖动(请参阅Using the Windows Headers)。这些标题与boost asio使用的Windows Sockets 2标题冲突。

以下修复了与Windows套接字声明冲突的问题:

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <boost/asio.hpp>

注意:请记住,定义WIN32_LEAN_AND_MEAN预处理程序符号会跳过包含多个系统标头的内容。为了解释这一点,您需要明确包含它们。如果是ShellExecute,则为#include <Shellapi.h>