我正在尝试使用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
任何想法都将不胜感激!
答案 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>
。