我有一个库(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 ~$
这应该是可能的,因为链接器必须验证这一点,没有?
答案 0 :(得分: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
。它是一个类似的功能,但不完全兼容。 {2000}中提供了WSAAddressToString
。
脚注: InetNtopW
和inet_ntop
函数基本相同,只是W版本需要wchar_t
而inet_ntop
需要{ {1}}。许多Windows功能都是以这种方式复制的。