2016-07-05 59 views
0

我試圖用升壓工作包括升壓網絡庫使得WINDOWS.H功能未定義

我包括這個樣子:

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

我想測試這個電話:

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

當我編譯我得到「ShellExecute是未定義的」。如果我將Windows.h包括在boost包含的上面,它會被編譯器拾取,但我會得到大量的Winsock錯誤。我正在使用VS 2015.

這隻發生在網絡庫 - 我一直在使用boost文件系統沒有問題。

出現這種情況與Windows.h

任何想法提供可以理解,所有功能!

+1

您正在使用WIN32_LEAN_AND_MEAN在其私有.h文件中與Boost進行戰鬥。很調皮。最好的方法是首先'#include ',這樣Boost就不會嘗試它。 –

回答

2

你需要包括WINDOWS.H#define WIN32_LEAN_AND_MEAN之前,以防止它在Windows套接字拖動1頭(見Using the Windows Headers)。這些標題與boost asio使用的Windows套接字2標題相沖突。

與碰撞的Windows Sockets聲明瞭以下修復的問題:

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

注:請記住,該定義WIN32_LEAN_AND_MEAN預處理符號跳過包括許多系統頭的。爲了解決這個問題,你需要明確地包含它們。在ShellExecute的情況下,這將是#include <Shellapi.h>

+0

嗯,謝謝指出我在正確的方向,但這並沒有解決它 - 只是使用'WIN32_LEAN_AND_MEAN'除了Windows.h沒有頭標導致'ShellExecute'未定義。包含Boost庫時與OP相同的問題。 – matt

+1

@matt:您需要#include '使用[ShellExecute](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153.aspx)。該文檔告訴你,要包含哪個頭(以及要鏈接的庫)。 – IInspectable

+0

感謝您的幫助,我設法讓它工作,我正在摸索很多東西。 :) – matt