web-dev-qa-db-ja.com

非推奨のwinsock

VS2015(C++コンソールアプリケーション)を使用してUDPマルチキャストソケットプログラムを作成しようとしています。

私は次のエラーを受け取りました、

Error   C4996   'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings mulitcast_listener

「プロジェクト」->「プロパティ」->「構成プロパティ」->「C/C++」->「プリプロセッサ」->「プリプロセッサ定義」でプロジェクト設定に_WINSOCK_DEPRECATED_NO_WARNINGSシンボルを追加しようとしました。同じ。

そして、上にシンボルを追加しようとしました#include "stdafx.h" like

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

そしてNo(/ sdl-) on "Project"-> "Properties"-> "Configuration properties"-> "C/C++"-> General-> SDLチェック

今、私は言っているエラーメッセージが表示されます

Warning C4603   '_WINSOCK_DEPRECATED_NO_WARNINGS': macro is not defined or definition is different after precompiled header

最後に実装しようとしました

inet_pton(AF_INET, HELLO_GROUP, (PVOID *)(&mreq.imr_multiaddr.s_addr));

の代わりに

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP);

_WINSOCK ...マクロを追加してもエラーが解決されなかった理由を理解する必要があります。

前もって感謝します。

9
kar

コメントに記載されているように、解決策は、

#define _WINSOCK_DEPRECATED_NO_WARNINGS

後に配置されます

#include "stdafx.h"

しかし、他の#includeステートメント。

12
Aify

前のアドバイスは機能しますが、_stdafx.h_の目的を無視しています。アイデアは、頻繁に変更しないヘッダーファイルに_#include_ステートメントを配置することですinside_stdafx.h_を使用するためにプリコンパイル済みヘッダーのしたがって、理想的に配置する必要があります

_#define _WINSOCK_DEPCRECATED 
_

_stdafx.h_内、特に影響を受ける他の_#include_ステートメントの前、特に_winsock2.h_またはその他のwinsock関連ヘッダーを含める前。

2
Dunc