ダイアログを使用してtcp/ip通信をするには

解決


こうたく  2004-01-14 17:29:17  No: 53046  IP: [192.*.*.*]

MFC AppWizardのダイアログベースを使用してtcp/ip通信をしたいのですが、wsockを使ってみたら大量のエラーが出てしまいます。wsockは使用できないのでしょうか?

編集 削除
YuO  2004-01-14 18:28:11  No: 53047  IP: [192.*.*.*]

どのようなエラーが出たのですか?

WinSock API群であれ,CAsyncSocket系統であれ,
MFCダイアログアプリケーションであっても問題なく利用可能なはずです。

編集 削除
こうたく  2004-01-15 14:01:16  No: 53048  IP: [192.*.*.*]

さっそくありがとうございます。
主にこのようなエラーが出ます

c:\microsoft visual studio\vc98\include\winsock2.h(143) : error C2011: 'timeval' : 'struct' で示される型としてすでに定義されています。

c:\microsoft visual studio\vc98\include\winsock2.h(2333) : error C2375: 'WSACancelAsyncRequest' : 再定義されています。異なるリンケージです。
        c:\microsoft visual studio\vc98\include\winsock.h(822) : 'WSACancelAsyncRequest' の宣言を確認してください。
です
今は、BorlandCのプログラムを参考に作っているのですがVisualC++は、始めたばかりでどこにどう記述すればよいのかよくわからないのです。すみません。
プログラムは、Dlg.cppに記述すればよいのでしょうか?

編集 削除
こうたく  2004-01-15 14:16:48  No: 53049  IP: [192.*.*.*]

エラーの
c:\microsoft visual studio\vc98\include\winsock2.h(143) : error C2011: 'timeval' : 'struct' で示される型としてすでに定義されています。
のところを、ダブルクリックしたら

/*
 * Structure used in select() call, taken from the BSD file sys/time.h.
 */
struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* and microseconds */
};

と出たのでとりあえず消してみたら、このエラーがなくなったのですがこれはよいのでしょうか?

編集 削除
tetrapod  2004-01-15 15:24:42  No: 53050  IP: [192.*.*.*]

> と出たのでとりあえず消してみたら、
んなムチャクチャな。
システム (Microsoft) の提供するヘッダファイルを書き換えてしまったのですか?
それはダメです。すぐに元に戻してください。
# っていうか VC++ の再インストールが望ましい。

win32 の winsock にはぜんぜん詳しくないのですが、
winsock.h と winsock2.h を両方 include すると誤動作するはずです。
どちらか片方だけに統一すべし。

http://home.a03.itscom.net/tsuzu/programing/tips34.htm
http://www.kumei.ne.jp/c_lang/intro/no_91.htm

編集 削除
こうたく  2004-01-15 15:34:37  No: 53051  IP: [192.*.*.*]

すみません。自分でもすぐに気づき元に戻しますた。バカな行為でしたね。
winsock.hをincludeした記憶はないのですが・・・
もう一度最初から作り直してみることにします。

編集 削除
とおりすがり  2004-01-15 16:28:38  No: 53052  IP: [192.*.*.*]

Winsock2.hをインクルードする場合、windows.hよりも先にインクルードしないと
#define あたりがなにか悪さをするという話をどこかで聞いた覚えがあります。
とりあえず、確認してみてください。

編集 削除
こうたく  2004-01-15 16:45:28  No: 53053  IP: [192.*.*.*]

コンソールアプリケーションで実行したらうまく動くのですが、ダイアログベースで実行したらうまくいきません。ボタンをクリックしたら通信を開始したいのですが。
ちなみにインクルードはwinsock2しかしてないのですが上のようなエラーが出ます。初期設定か何かが間違っているのでしょうか。
ダイアログを作るときに「WOSAをサポートしますか?」の所のwindowsソケットにチェックは入れるのですか?

編集 削除
こうたく  2004-01-15 16:57:05  No: 53054  IP: [192.*.*.*]

一番最初にwinsock2.hをインクルードしたらできました。皆さんご迷惑をおかけしました。ありがとうございます。

編集 削除