winsock と mfcアプリケーションのコンパイルエラー

[戻る]
ftake2000 2003/10/28(火) 17:05:13
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です。

dairygoods 2003/10/28(火) 17:39:30
エラーメッセージに出ているとおり、
MFCでは<windows.h>をincludeしてはいけないということでしょう。

アイススケーター 2003/10/28(火) 18:41:12
MFCでソケットプログラムを作成しますが、特に<winsock.h>はインクルードしていませんよ。

stdafx.hで次の記述があるので不要と思いますが

#include <afxsock.h>        // MFC のソケット拡張機能

ftake2000 2003/10/29(水) 06:02:27
VC++の開発環境を,つかうと、afxsock.hをインクルードしています。このなかで、
afxwin.h、winsock.hの順番で,インクルードしています。
ただ、winsock2を使いたい場合、下のようなコードをコンパイルしても,同じコンパイルエラー
になります。
MFCアプリケーションでは,afxsockのほうを使わなくてはいけないということなのでしょうか?

#include <winsock2.h>
#include <afxsock.h>
#include <afxwin.h>
void main()
{}
~

wood 2003/10/29(水) 06:52:52
回答ではありません
winsock.hとwinsock2.h どちらを使いたい質問なの?
また、そのヘッダーを利用する(使用する 関数)の決定はどのようにして行ったの?

構文エラーと言うのは目的にあった物を正しく記述していないためのものですから
キチンと仕様を定めてから作ってますか?

ftake2000 2003/10/29(水) 09:23:18
>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をインクルードするときには、いつも、この順番ですればいいということなの
でしょうか? 

でも、ヘッダーファイルが順番に依存しているのは、なんとなく気持ちが悪いと思います
けど。。(ライブラリをリンクするときみたい)

wood 2003/10/29(水) 12:30:35
INCLUDEしているヘッダの中身をみて、お考えになればよいのではないですか?
順序変えたければ中身をカスマイズすれば済むのではないのですか

古いスレッドには追加発言できません。