3

次のエラーは、windowsとwinsock2のみが含まれているファイルからのものです。

C:\Users\ioil\Desktop\dm\bin>dmc sockit.c
typedef struct fd_set {
                      ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(85) : Error: 'fd_set' is already defined
} fd_set;
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(88) : Error: identifier or '( declarator )' expected
struct timeval {
               ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(129) : Error: 'timeval' is already defined
};
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(132) : Error: identifier or '( declarator )' expected
struct  hostent {
                ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(185) : Error: 'hostent' is already defined
Fatal error: too many errors
--- errorlevel 1

C:\Users\ioil\Desktop\dm\bin>

すでに試されたこと:winsock.dllファイルをコンパイルするコンパイラおよびプログラムと同じディレクトリに配置し、system32ディレクトリに配置し、regsrv32コマンドを使用してレジストリに入力します。ここからどこに行けばいいのかわからないので、アドバイスをいただければ幸いです。。。

4

3 に答える 3

2

windows.h には、winsock2.h インクルード ファイルと競合する winsock.h が含まれています。windows.h をインクルードする前にWINSOCKAPIを定義して、最初のインクルードを防止し ます。

:

#define _WINSOCKAPI_ 
#include "windows.h"
#include "winsock2.h"
于 2010-06-17T05:46:02.303 に答える
2

Iulian Şerbănoiu の提案に従って、windows.h の前に winsock2.h を配置する必要があります。

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

また、lean and mean マクロを使用することもできます。

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

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

理由は msdn に記載されています:基本的な Winsock アプリケーションの作成

また、プログラムを WS2_32.lib ファイルにリンクしていることを確認してください (これは、Visual Studio など、使用している IDE によって異なります)。Visual Studio では、
[プロジェクト] > [プロパティ] > [リンカー] > [追加のインクルード] (またはそのようなもの) に移動します。 、現時点ではビジュアルスタジオを備えたコンピューターではありません..)これは上記のリンクにも記載されています。

于 2010-06-17T09:24:54.467 に答える
1
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")

これを使用してコンパイルエラーを回避します

于 2011-02-22T06:24:16.987 に答える