0

我有一个库(ws2_32)和一个头文件(ws2tcpip.h),但由于某种原因,库中有一些函数不在头文件中。有没有办法可以确定方法签名,以便我自己将它们包含在标题中?

asdf@fdsa ~$ strings /usr/lib/w32api/libws2_32.a | grep -i 'inet_*ntop'
_inet_ntop@16
__imp__inet_ntop@16
_InetNtopW@16
__imp__InetNtopW@16
inet_ntop                      <<< I need this one
_inet_ntop@16
__imp__inet_ntop@16
InetNtopW                      <<< or this one
_InetNtopW@16
__imp__InetNtopW@16
asdf@fdsa ~$ grep -i -B 4 -A 2 -R "ntop" /usr/include/w32api/ws2tcpip.h
asdf@fdsa ~$                  

这应该是可能的,因为链接器必须验证这一点,不是吗?

参考:GCC/Cygwin下的InetNtop和ws2tcpip.h

4

1 回答 1

0

不,那里没有。并非没有拆卸库并进行大量猜测。一般来说,认为它是无望的。

但是,类似InetNtopW和的函数inet_ntop都有文档记录(MSDN),所以我们知道函数签名是什么。请注意,这些功能被标记为需要 Vista,实际上您可以看到WS2tcpip.h它们被一个守卫包围:

#if (NTDDI_VERSION >= NTDDI_VISTA)

因此,除非您为 Vista 支持定义预处理器宏,否则您将无法获得原型。

// Require Vista
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
#include <WS2tcpip.h>

或者,您可以使用WSAAddressToString. 这是一个类似的功能,但不完全兼容。可WSAAddressToString从 Windows 2000 获得。

脚注:InetNtopW函数inet_ntop基本上是一样的,除了 W 版本的 takewchar_tinet_ntoptake char。许多 Windows 功能都是以这种方式复制的。

于 2012-06-16T23:59:04.113 回答