2016-07-05 14 views
0

未定義はWindows.h関数を作る:は私が</p> <p>私は次のようになり含みブーストで動作するようにしようとしている

:私はこの呼び出しをテストしようとしている

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

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

コンパイルすると「ShellExecute is undefined」と表示されます。私がWindows.hをboostのインクルードの上にインクルードすると、それはコンパイラによって取り上げられますが、代わりにWinsockエラーが発生します。私はVS 2015を使用しています。

これはネットワークライブラリでのみ発生します。これに先立って問題なくファイルシステムをブーストしています。

これは、任意の考えをいただければ幸いですWindows.h

によって提供されているすべての機能を起こります!

+1

あなたは自分のプライベート.hファイルでWIN32_LEAN_AND_MEANを使ってBoostと戦います。非常にいたずらな。最良の方法は '#include 'です。ブーストはそれを試しません。 –

答えて

2

あなたがWindowsソケットに1つのヘッダー(Using the Windows Headersを参照)ドラッグからそれを防ぐために、#define WIN32_LEAN_AND_MEAN前にはWindows.hを含む必要があります。これらのヘッダーは、boost asioで使用されるWindowsソケット2ヘッダーと衝突します。

次の修正衝突Windowsソケットの宣言の問題:

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

注:WIN32_LEAN_AND_MEANプリプロセッサシンボルを定義すると、システムヘッダの数を含めることをスキップすることを、覚えておいてください。それを考慮に入れて、明示的にそれらを含める必要があります。 ShellExecuteの場合、これは#include <Shellapi.h>になります。

+0

うん、私は正しい方向に向いてくれてありがとうが、これは修正されていない.Windows.h以外のヘッダを持たない 'WIN32_LEAN_AND_MEAN'を使うだけで、' ShellExecute'が未定義になる。 Boostライブラリが含まれているときのOPと同じ問題。 – matt

+1

@matt:[ShellExecute](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153.aspx)を使うには '#include 'が必要です。ドキュメンテーションには、どのヘッダをインクルードするか(およびどのライブラリをリンクするか)が書かれています。 – IInspectable

+0

あなたの助けてくれてありがとう、私はそれを働かせることができた、私は多くの周りにぼやけていた。 :) – matt

関連する問題