2011-02-03 37 views
0

任何人都知道什麼頭,我必須包括使用InetNtop功能?
我試過winsock2.h,ws2tcpip.h我已經包括WS2_32 librabry。我使用Windows 7
這是我的錯誤,我得到的編譯時間:InetNtop:功能無法解析InetNtop:無法找到這頭被使用

編輯:
char temp[10];
int bytes_recv = Recv(temp, sizeof(temp));
char result[INET_ADDRSTRLEN];
InetNtop(AF_INET, (void*)(&temp[4]), result, sizeof(result));

我想打印一個IP是什麼溫度。

+0

究竟是什麼問題?你的代碼是否被編譯? – thkala 2011-02-03 19:35:23

+0

它沒有得到像錯誤一樣的錯誤:'InetNtop'沒有在這個範圍內聲明,並且名稱沒有被解析 – Kobe 2011-02-03 19:40:44

+0

看看頭部內部,看看它是否真的存在,如果它不存在,那麼沒有大量的項目配置可以幫你。您最好的選擇是獲得最新的副本。 – dreamlax 2011-02-03 20:20:03

回答

3

據其documentationWs2tcpip.h是其實際的頭文件。

編輯:

根據文檔,使用此功能需要代碼的Windows Vista或更高版本進行編譯。既然你包括必要的頭,但功能是不可見的,我揣你沒有設置正確的定義或編譯器選項編譯代碼一個合適的版本。

您正在使用

實際的Windows版本並不重要 - 要編譯什麼(即目標版本)是。

編輯2:

描述here指示哪個Windows版本要編譯支持您應該添加適當的#define指令。例如。

#include <SdkDdkver.h> 

#define NTDDI_VERSION NTDDI_VISTA 
#define WINVER _WIN32_WINNT_VISTA 
#define _WIN32_WINNT _WIN32_WINNT_VISTA 

一些定義的重疊,可能並不需要,但在罕見的時間窗口我的代碼我只是使用它們,確保:-)

編輯3:

事情對的MinGW/GCC有點不同:

#include <w32api.h> 

#define WINVER     WindowsVista 
#define _WIN32_WINDOWS   WindowsVista 
#define _WIN32_WINNT   WindowsVista 

注意:這些定義應放在包括Windows.h或任何其他頭,但之前10。

編輯4:

WS2tcpip.h在Visual Studio 2010:

#if (NTDDI_VERSION >= NTDDI_VISTA) 
. 
. 
. 
PCSTR 
WSAAPI 
inet_ntop(
    __in        INT    Family, 
    __in        PVOID   pAddr, 
    __out_ecount(StringBufSize)   PSTR   pStringBuf, 
    __in        size_t   StringBufSize 
    ); 

PCWSTR 
WSAAPI 
InetNtopW(
    __in        INT    Family, 
    __in        PVOID   pAddr, 
    __out_ecount(StringBufSize)   PWSTR   pStringBuf, 
    __in        size_t   StringBufSize 
    ); 

#define InetPtonA  inet_pton 
#define InetNtopA  inet_ntop 

#ifdef UNICODE 
#define InetPton  InetPtonW 
#define InetNtop  InetNtopW 
#else 
#define InetPton  InetPtonA 
#define InetNtop  InetNtopA 
#endif 
. 
. 
. 
#endif // (NTDDI_VERSION >= NTDDI_VISTA) 

因此,關鍵在這種情況下定義是NTDDI_VERSION,人們所期待的新的API增加。

我在MinGW32/GCC-4.4.2中找不到InetNtop的定義,所以它很可能在你的版本中不受支持。

0

貌似Ws2tcpip.h,看到msdn

1

儘管存在於Ws2tcpip.h中,但大多數項目的默認目標是Windows XP,而您嘗試使用的功能是在Vista中引入的,因此,您需要將項目配置爲以Vista爲目標。至少有三件事情,你可以在這裏做:

  1. 在你stdafx.h(如果有的話),找到WINVER_WIN32_WINNT的定義默認情況下,這些都是0x0501],都將其更改爲0x0600。 Windows 7是0x0601。另外,定義NTDDI_VERSION0x06000000

  2. 如果您沒有stdafx.h標題,請將這些定義添加到項目的C/C++預處理器設置(WINVER=0x0600,_WIN32_WINNT=0x0600,NTDDI_VERSION=0x06000000)中。

  3. 作爲最後的手段,包括對特定的源文件的所有頭之前手動定義這些:

    #ifndef WINVER 
    #define WINVER 0x0600 
    #endif 
    #ifndef _WIN32_WINNT 
    #define _WIN32_WINNT 0x0600 
    #endif 
    #ifndef NTDDI_VERSION 
    #define NTDDI_VERSION 0x06000000 
    #endif 
    #include <windows.h> 
    #include <Ws2tcpip.h> 
    

此外,請確保您有ws2tcpip.h向上最新副本。例如,Visual Studio 2005附帶的副本沒有針對InetNtop的聲明。

3

不是100%相關,但對於此調用的linux/unix版本(inet_ntop(...)),您需要#include <arpa/inet.h>