mfc アプリケーションのソースで、以下のような順序で、ヘッダーファイルをinclude す
ると、コンパイル時に、エラーします。
$ cl hoge5.cpp /D _AFXDLL /MD
C:\PROGRA~1\MICROS~3\VC98\MFC\INCLUDE\afxv_w32.h(14) : fatal error C1189:
#error : WINDOWS.H already included
. MFC apps must not #include <windows.h>
winsock.h と、afxwin.hの順番を変えると、出ません。winsock.hのなかで、_WINDOWS_
が定義されているからだと思うのですが、なにか、正しい方法のようなものがあるのでし
ょうか?
#include <winsock.h>
#include <afxwin.h>
void main()
{}
環境は、
VC++6
Windows2000です。
エラーメッセージに出ているとおり、
MFCでは<windows.h>をincludeしてはいけないということでしょう。
MFCでソケットプログラムを作成しますが、特に<winsock.h>はインクルードしていませんよ。
stdafx.hで次の記述があるので不要と思いますが
#include <afxsock.h> // MFC のソケット拡張機能
VC++の開発環境を,つかうと、afxsock.hをインクルードしています。このなかで、
afxwin.h、winsock.hの順番で,インクルードしています。
ただ、winsock2を使いたい場合、下のようなコードをコンパイルしても,同じコンパイルエラー
になります。
MFCアプリケーションでは,afxsockのほうを使わなくてはいけないということなのでしょうか?
#include <winsock2.h>
#include <afxsock.h>
#include <afxwin.h>
void main()
{}
~
回答ではありません
winsock.hとwinsock2.h どちらを使いたい質問なの?
また、そのヘッダーを利用する(使用する 関数)の決定はどのようにして行ったの?
構文エラーと言うのは目的にあった物を正しく記述していないためのものですから
キチンと仕様を定めてから作ってますか?
>winsock.hとwinsock2.h どちらを使いたい質問なの?
>また、そのヘッダーを利用する(使用する 関数)の決定はどのようにして行ったの?
作りたいのは、winsock の関数を使うMFCのアプリケーションです。
>構文エラーと言うのは目的にあった物を正しく記述していないためのものですから
>キチンと仕様を定めてから作ってますか?
私の質問もそのことなのですが、winsock.h、afxwin.hという順番でインクルードする場
合のみコンパイルがエラーになります。
ただ、これは、winsock.h(winsock2.h でも同じ) が、windows.hをインクルードしてい
るからです。
もし、MFCアプリケーションをインプリスする場合、windows.hを、インクルードしてはい
けないのなら、winsock.hは、インクルードできなくなってしまうので、winsock APIは、
つかえないということになってしまいます。
ただ、afxsock.hも、中で、afxwin.h,winsock.hという順番で、インクルードしていま
す。
winsock.hをインクルードするときには、いつも、この順番ですればいいということなの
でしょうか?
でも、ヘッダーファイルが順番に依存しているのは、なんとなく気持ちが悪いと思います
けど。。(ライブラリをリンクするときみたい)
INCLUDEしているヘッダの中身をみて、お考えになればよいのではないですか?
順序変えたければ中身をカスマイズすれば済むのではないのですか