TCPIPにまつわるエラー

[戻る]
2006/05/16(火) 21:02:39
理画面\ipmsav.cpp(23) : error C2061: 構文エラー : 識別子 'NOTIFYICONDATA' がシンタックスエラ
ーを起こしました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(26) : error C2501: 'NOTIFYICONDATA' : 識別名を宣言するのに、型が指定されていませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(26) : error C2239: 無効なトークン 'identifier' が 'NOTIFYICONDATA' の宣言の後にあら
われました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(26) : error C2061: 構文エラー : 識別子 'g_nid' がシンタックスエラーを起こしました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(73) : error C2065: 'g_nid' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(88) : error C2065: 'Shell_NotifyIcon' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(88) : error C2065: 'NIM_DELETE' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(445) : error C2061: 構文エラー : 識別子 'NOTIFYICONDATA' がシンタックスエラーを起こしました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(447) : error C2065: 'nid' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(447) : error C2227: '->szTip' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(447) : error C2065: 'lpszTitle' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(448) : error C2227: '->cbSize' : 左側がクラス、構造体、共用体へのポインタではありませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(449) : error C2227: '->hIcon' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(449) : error C2065: 'nIconID' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(450) : error C2227: '->hWnd' : 左側がクラス、構造体、共用体へのポインタではありません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(451) : error C2227: '->uCallbackMessage' : 左側がクラス、構造体、共用体へのポインタでは
ありません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(452) : error C2227: '->uFlags' : 左側がクラス、構造体、共用体へのポインタではありませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(452) : error C2065: 'NIF_MESSAGE' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(452) : error C2065: 'NIF_ICON' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(452) : error C2065: 'NIF_TIP' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(453) : error C2065: 'NIM_ADD' : 定義されていない識別子です。
cl.exe の実行エラー
と言ったエラーが出ます。

2006/05/16(火) 21:06:05
#define WIN32_LEAN_AND_MEAN            

#include <windows.h>
#include <winsock2.h>                    
#include <stdio.h>
#include <windowsx.h>
#include "resource.h"

#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib, "wsock32.lib")

//クラス名定義
#define        CLASS_NAME        "Exp_Shell_NotifyIcon"
#define        WM_ICON_CLICK    WM_USER + 999

#define MY_MSG (WM_USER + 1) //自前のメッセージ

//プロトタイプ宣言
LRESULT CALLBACK WinProc( HWND, UINT, WPARAM, LPARAM );
BOOL ShowPopup( HWND );
BOOL SetTasktrayIcon( HINSTANCE, HWND, NOTIFYICONDATA *, LPCTSTR, const int );
/////////////////////////以下命令文/////////////////////
と言った感じで最初の方宣言してあるのですが、#define WIN32_LEAN_AND_MEANで引っ掛かっ
てNOTIFYICONDATAに関する命令文が全て定義されてないといわれてしまいます。
コメントにしてWINSOCK2からWINSOCKにしたら動いたのですがそれだと非同期モードが作動して
しまいます。
これはどのようにしたら全て上手くいくのでしょうか?

環境はWIN2000、VC++5.0 MFC未使用

Sugi 2006/05/16(火) 21:08:55
#include <shellapi.h>で
必要なヘッダが上記のソースにはありませんが
stdafx.h等に入っていますでしょうか

2006/05/16(火) 21:11:55
Sugi様返答有難うございます。
そう思ってstdafx.hを追加してみたんですが、やはり追加した状態でエラーになってしまいま
した。

ヘッダーファイルにもエラーとかも出たりと良くわからなくなってしまいまして・・・。
上の方にインクルードがあるのでそれを試してみてからの方がいいですよね?

Sugi 2006/05/16(火) 21:40:59
stdafx.hを使用する場合

#define WIN32_LEAN_AND_MEAN            

#include <windows.h>
#include <winsock2.h>                    
#include <windowsx.h>

#include <stdio.h>
#include <shellapi.h>

のstdafx.hで
ソースに
#include "stdafx.h"
#include "resource.h"

#pragma comment(lib,"ws2_32.lib")
//#pragma comment(lib, "wsock32.lib")

//クラス名定義
#define        CLASS_NAME        "Exp_Shell_NotifyIcon"
#define        WM_ICON_CLICK    WM_USER + 999

#define MY_MSG (WM_USER + 1) //自前のメッセージ

でどんなエラーでしょうか

2006/05/17(水) 11:52:13
遅れてしまい申し訳ありません。
言われた通りに試してみました。
エラーは出なかったんですが、受信画面を起動してソケットを開いた段階で非同期化が失敗と言
われてしまいました。
そこについてのプログラムなんですが、
int mystream(HWND hDlg, u_short uport)
{
    SOCKADDR_IN saddr;
    int nAsync;

    listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
    if (listen_s < 0) {
        if (WSAGetLastError() != WSAEWOULDBLOCK) {
            MessageBox(hDlg,
              "ソケットオープンエラー",
               "Error",MB_OK | MB_ICONEXCLAMATION);
            return -1;
        }
    } else {
        
        MessageBox(NULL,"ソケットオープンしました","socket成功",MB_OK);
    }
    bSOCKET_LISTEN = TRUE;//成功した場合

    nAsync = WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
                             //非同期モード
    
    if (nAsync != 0) {  ←ここで引っ掛かってソケットが開かない
        MessageBox(hDlg,"非同期化失敗1","Error",MB_OK |        
                         MB_ICONEXCLAMATION);
        closesocket(listen_s);
        bSOCKET_LISTEN = FALSE;
        return -2;
    } 
//必要事項のセット
    memset(&saddr, 0, sizeof(SOCKADDR_IN));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(uport);
    saddr.sin_addr.s_addr = INADDR_ANY;

    if (bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr)) == OCKET_ERROR) 
{
        MessageBox(hDlg,"bind Error\n
               別なポート番号でもう一度試してください。", 
            "Error",MB_OK);
            closesocket(listen_s);
            bSOCKET_LISTEN = FALSE;
            
            return -3;
    }
こんな感じです。
タスクバーに入れる処理を入力してアイコンがダブルクリックした時に出力されると言う風に取
っていました。

Sugi 2006/05/17(水) 13:22:36
私の場合、socket処理はスレッドを行うことが大半で、非同期メッセージのやり方は
試したことがありませんが、

nAsync = WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
と
bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr)
それと上のソースにはないですが
listen(listen_s, 1)など出てくると思いますが
bindされていない状態でWSAAsyncSelectを呼び出しているから
失敗しているとかではないでしょうか

send(), recv(), connect(), accept()などブロッキングされる関数を非同期にする
ためのWSAAsyncSelectだとおもいますので通常の同期ですと

listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
if (bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr)) == OCKET_ERROR) ;
listen(listen_s , 1);
accept(listen_s, (SOCKADDR *)&client , &client_addr);
の順番ですので、最後のacceptでブロッキング(接続待ち)しないために
WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
で非同期関数を呼ぶのではないかと思います。

Sugi 2006/05/17(水) 13:46:46
// 接続待ち開始処理関数
int mystream(HWND hDlg, u_short uport)
{
  listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
  if (bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr)) == OCKET_ERROR) ;
  listen(listen_s , 1);
  WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
}
// 接続メッセージ受信のウィンドウプロシージャー
LRESULT CALLBACK WndProc(){
 
  case FD_ACCEPT:
    conn_s=accept(listen_s, (SOCKADDR *)&client , &client_addr);
}

のように試してみてはどうしょうか

2006/05/17(水) 13:49:17
Sugiさん返信有難うございます。
最後に書いてるあるのってこの位置に書くんですよね?
そうなると、
listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
    if (listen_s < 0) {
        if (WSAGetLastError() != WSAEWOULDBLOCK) {
            MessageBox(hDlg,
              "ソケットオープンエラー",
               "Error",MB_OK | MB_ICONEXCLAMATION);
            return -1;
        }
から
listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
    if (bind(listen_s, (SOCKADDR*)&saddr, sizeof(saddr)) == SOCKET_ERROR) ;
        listen(listen_s, 1);
        accept(listen_s, (SOCKADDR *)&client, &client_addr);
     WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
と言う感じですか?

試してみたらエラーが79も・・・。

2006/05/17(水) 13:53:45
先にお答え頂いてましたね。
Sugiさんが提示してくれた宣言文を書いてみたのですが同じようにエラーが79も出てしまいま
した。

Sugi 2006/05/17(水) 14:01:09
また、'NOTIFYICONDATA' がシンタックスエラー
とかですか?

2006/05/17(水) 14:05:51
シンタックスエラーはないのですが、
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(360) : warning C4101: 'nAsync' : ローカル変数は 1 度も使われません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(361) : error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(361) : error C2374: 'bSOCKET_LISTEN' : 再定義されています。2 回以上初期化されてい
ます。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(363) : error C2501: 'nAsync' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(363) : error C2065: 'hDlg' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(365) : error C2143: 構文エラー : ';' が 'if' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(367) : error C2501: 'closesocket' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(367) : error C2040: 'closesocket' : 'int' は 'int (unsigned int)' と間接操作のレ
ベルが異なります。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(368) : error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(368) : error C2374: 'bSOCKET_LISTEN' : 再定義されています。2 回以上初期化されてい
ます。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(369) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(370) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(373) : error C2501: 'saddr' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(373) : error C2239: 無効なトークン '.' が 'saddr' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(373) : error C2059: 構文エラー : '.'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(374) : error C2501: 'saddr' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(374) : error C2086: 'saddr' : 再定義されました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(374) : error C2239: 無効なトークン '.' が 'saddr' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(374) : error C2059: 構文エラー : '.'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(375) : error C2501: 'saddr' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(375) : error C2086: 'saddr' : 再定義されました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(375) : error C2239: 無効なトークン '.' が 'saddr' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(375) : error C2059: 構文エラー : '.'

2006/05/17(水) 14:06:10
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(377) : error C2143: 構文エラー : ';' が 'if' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(380) : error C2501: 'closesocket' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(380) : error C2040: 'closesocket' : 'int' は 'int (unsigned int)' と間接操作のレ
ベルが異なります。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(381) : error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(381) : error C2374: 'bSOCKET_LISTEN' : 再定義されています。2 回以上初期化されてい
ます。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(383) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(384) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(389) : error C2501: 'closesocket' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(389) : error C2040: 'closesocket' : 'int' は 'int (unsigned int)' と間接操作のレ
ベルが異なります。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(390) : error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(390) : error C2374: 'bSOCKET_LISTEN' : 再定義されています。2 回以上初期化されてい
ます。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(391) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(392) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(395) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(398) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(405) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(426) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(438) : error C2143: 構文エラー : ';' が 'case' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(441) : error C2143: 構文エラー : ';' が 'break' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(443) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(453) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(458) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(464) : error C2501: 'nid' : 識別名を宣言するのに、型が指定されていません。

2006/05/17(水) 14:06:30
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(464) : error C2239: 無効なトークン '->' が 'nid' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(464) : error C2059: 構文エラー : '->'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(465) : error C2501: 'nid' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(465) : error C2086: 'nid' : 再定義されました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(465) : error C2239: 無効なトークン '->' が 'nid' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(465) : error C2059: 構文エラー : '->'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(466) : error C2501: 'nid' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(466) : error C2086: 'nid' : 再定義されました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(466) : error C2239: 無効なトークン '->' が 'nid' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(466) : error C2059: 構文エラー : '->'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(467) : error C2501: 'nid' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(467) : error C2086: 'nid' : 再定義されました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(467) : error C2239: 無効なトークン '->' が 'nid' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(467) : error C2059: 構文エラー : '->'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(468) : error C2501: 'nid' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(468) : error C2086: 'nid' : 再定義されました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(468) : error C2239: 無効なトークン '->' が 'nid' の宣言の後にあらわれました。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(468) : error C2059: 構文エラー : '->'
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(469) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(470) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(472) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(481) : error C2143: 構文エラー : ';' が 'if' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(486) : error C2143: 構文エラー : ';' が 'if' の前に必要です。

2006/05/17(水) 14:06:52
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(492) : error C2065: 'mouse' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(492) : error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(492) : error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(494) : error C2065: 'hWnd' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(499) : error C2143: 構文エラー : ';' が 'switch' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(504) : error C2143: 構文エラー : ';' が 'break' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(510) : error C2143: 構文エラー : ';' が 'return' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(511) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(514) : error C2143: 構文エラー : ';' が '}' の前に必要です。
長いので分割しましたがこんな感じです。

Sugi 2006/05/17(水) 14:20:19
SOCKET_LISTENはどこで定義されているかです。
'bSOCKET_LISTEN' のエラー箇所以前になんらか問題があるのか
あと、{ }が閉じていない、;がない等だと
それ以降大量のエラーがでることはよくあります。
ヘッダファイルもエラーがあると、ソース側で大量にエラーを吐くこともあります。

'bSOCKET_LISTEN' をヘッダで定義ってことはないですよね

2006/05/17(水) 14:24:08
bSOCKET_LISTENは
BOOL bSOCKET_LISTEN = FALSE, bSOCKET_S = FALSE
で一番上の方で宣言してあり、そこから派生で他の所で使用している感じになっていました。
ヘッダで定義はしていなくソースファイルで宣言してありました。

Sugi 2006/05/17(水) 14:41:19
>そこから派生で他の所で使用している感じになっていました
これは他のソースを参照しているということでしょうか?

Sugi 2006/05/17(水) 14:46:36
あと
error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
も気になりますどこかで同じ変数が宣言されていますか?
クリックしたらそのエラー位置へ移動しますよね

2006/05/17(水) 14:48:46
返信有難うございます。
他のソースを参照していると言うわけではなく他の場所で作成してある
if (bSOCKET_LISTEN) {//リッスンソケット用選択
        if (closesocket(listen_s)) {
        MessageBox(hDlg,"リッスン・ソケットクローズ失敗",
        "Error",MB_ICONEXCLAMATION | MB_OK);
                  }
        }
        EndDialog(hDlg, IDOK);
        return TRUE;
             }
や
      MessageBox(hDlg, "accept error", "Error", MB_OK);
    closesocket(listen_s);
    bSOCKET_LISTEN = FALSE;
    return TRUE;
        }
    }
    if (closesocket(listen_s) != 0) {//accept関数が成功したら閉じること
    MessageBox(hDlg, "Error", "Error", MB_OK);
    return TRUE;
    }
    bSOCKET_LISTEN = FALSE;
    bSOCKET_S = TRUE;
等です。

Sugi 2006/05/17(水) 14:49:24
今わざとエラーを再現させてみましたが、同様なエラーになるので
やはりどこかで }が一つ多いとかではないでしょうか?
bSOCKET_LISTEN = TRUE;//成功した場合
の前のあたりで括弧の数が合っているか確認してみてください。

2006/05/17(水) 15:00:16
Sugi様たびたび有難うございます。
括弧が多いのかと思って色々と見直してて、何も変わってはいないのですがエラーをもう一度確
認しようとしてコンパイルした所4つに減っていました。
最後に書いて頂いた場所
// 接続メッセージ受信のウィンドウプロシージャー
LRESULT CALLBACK WndProc(){
 
  case FD_ACCEPT:
    conn_s = accept(listen_s, (SOCKADDR *)&client , &client_addr);
    return 0;
}
で
\受信管理画面ズヴァリ\ipmsav.cpp(403) : error C2046: 不正な 'case' です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'conn_s' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'client' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'client_addr' : 定義されていない識別子です。
となっていました。

error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
を改めて確認しようと思いまして実行したらエラーが消えてしまっていたので確認できずでし
た。
何もいじってないのですが・・・。

Sugi 2006/05/17(水) 15:00:38
361行の手前が怪しいかと思うのですが
ソースがわからないのでどこが悪いのかまでは予測できないですね(^^;

Sugi 2006/05/17(水) 15:03:41
えーっと(^^;
僕の参考に書いたものをそのままコピペしてますか??

例としてあげたものであって、動くようにコーディングはしてないので
そのまままる写しではエラーになりますが・・・
//error C2046: 不正な 'case' です。(switchがないため)

2006/05/17(水) 15:04:59
Sugi様有難うございます。
一応361行から前の部分を提示しておきます。
361行の手前は
//ソケット生成して、呼び出しまでの関数
int mystream(HWND hDlg, u_short uport)
{
    SOCKADDR_IN saddr;
    int nAsync;

    listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
    if (bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr)) 
                         == SOCKET_ERROR) ;
    listen(listen_s , 1);
    WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
    return 0;

    listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
    if (listen_s < 0) {
        if (WSAGetLastError() != WSAEWOULDBLOCK) {
            MessageBox(hDlg,
               "ソケットオープンエラー","Error",
               MB_OK | MB_ICONEXCLAMATION);
            return -1;
        }
    } else {
        
        MessageBox(NULL,"ソケットオープンしました","socket成功",MB_OK);
    }
    bSOCKET_LISTEN = TRUE;//成功した場合←361行目

こんな感じですね

2006/05/17(水) 15:06:02
丸写しはしてないです。
Switch文も含めて書いたんですけど同様に出てくるんです。

Sugi 2006/05/17(水) 15:20:19
見る限りでなにか気になるところはないのですが
そのあたりコメントアウトしてエラーが変わったりしますか?

2006/05/17(水) 15:24:00
一応先ほどの部分をちょっと変えてみたのですが、
LRESULT CALLBACK WndProc(){
    
    SOCKADDR from;
    int fromlen;
    int conn_s;
    
    memset(&from, 0, sizeof(SOCKADDR));
    fromlen = sizeof(from);
    

    switch(){
    
     case FD_ACCEPT:
        conn_s = accept(listen_s, (SOCKADDR *)&from, &fromlen);
        return 0;
    }
}
と言った具合にエラーなんですけど、WndProcで関数が値を返せない可能性があるといわれまし
た。
値を入れてないからだと思うのですが、何を入れればいいのやら不明で・・・・。
switchの所は上の方から使っているmsgでいけると思ったのですが宣言されていないとの事なの
で宣言しなおしです。

2006/05/17(水) 15:24:38
ちなみにエラーは変わらなかったです。

2006/05/17(水) 15:30:14
WndProcの値に
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
と入れてswitchで宣言しました。

値が返せないエラーに関してはまったく変わらずです。
もしかしてこの部分の下に
LRESULT CALLBACK WinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
とあるんですけどこれが邪魔してる感じですか?

Sugi 2006/05/17(水) 15:41:02
>もしかしてこの部分の下に
>LRESULT CALLBACK WinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
>とあるんですけどこれが
今2つWinProcがあるということですか?

私が例で示したWndProcは元のソースでSocket通知に指定したウィンドウ関数の中
のFD_ACCEPTにこのような感じでという意味であらたにWndProcをということではないです
(^^;


値が返せないとは関数内のパスにreturnがないという意味のエラーでしょうか?

kure 2006/05/17(水) 15:43:48
ちょっと見てられないので一言。

陣さん、まずはC言語のsyntaxを覚えてください。
Sugiさんがどう思ってらっしゃるかはわからいませんが、
掲示板でC言語のsyntaxについて講義するのは非常に大変ですし、不毛です。
市販の書籍には入門用にC言語の文法について易しく説明しているものが沢山あります。
入門書では物足りないのであればK&R本などでも良いでしょう。
とにかく、まずはC言語のsyntaxをきちんと覚えましょう。
そうすればsyntaxエラーはなくなります。

> もしかしてこの部分の下に
> LRESULT CALLBACK WinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
> とあるんですけどこれが邪魔してる感じですか?

「感じ」ってなんですか?
きちんとソースコードを提示もしていない状況でそんなことを聞かれても
答えようのない「感じ」です。

> 値が返せないエラー

についてですが、提示されてるコードがそのままであれば、
「値が返せない」のではなく「値を返していない」が正しいと思いますので、
switchでdefaultラベルをつけてreturnをするか、switch後にreturnしてください。

2006/05/17(水) 15:49:10
[[解決]]
kureさんのいうとおりですね。
Sugiさん本当に申し訳ありませんでした。
言われた本等を読もうと思います。

ITO 2006/05/17(水) 15:54:48
コンパイルエラーならCから始まるエラー番号
たとえば「C2065」を「MSDNライブラリー」で検索すればヘルプが出てきます。
あと、「{」や「}」の数もチェックしましょう。

Sugi 2006/05/17(水) 15:58:43
kureさん初めまして
コメントありがとうございます
syntaxの議論をするつもりではありませんでしたが
自分の開発の合間にだらだらコメントしてしまいました。

がんばってください。 >陳さん

kure 2006/05/17(水) 17:53:44
TO:陣さん
syntaxの話はsyntaxの話としてご自分のためにもきちんと勉強していただければ
それで良いです。
が、このスレの本題は「TCPIPにまつわるエラー」なのでは?
そちらは解決してないんじゃないでしょうか?

TO:Sugiさん
はじめまして。
いやぁSugiさんを攻めてるわけではないので
私の発言はあまり気にしないで下さい。
(陣さんのことも攻めてるわけじゃないですよ^^;)


で、一応本題の話をば。
WSAAsyncSelectが失敗するのであれば、直後のWSAGetlastErrorの値が何になっているか
調べてみてください。何かしらヒントにはなると思いますので。

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