我可以从静态库中创建标题吗?

时间:2012-06-16 23:42:31

标签: c winapi gcc cygwin winsock2

我有一个库(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 ~$                  

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

参考:InetNtop and ws2tcpip.h under GCC / Cygwin

1 个答案:

答案 0 :(得分:0)

不,没有。不是没有拆解库并进行大量猜测。一般来说,认为它毫无希望。

但是,InetNtopWinet_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

脚注: InetNtopWinet_ntop函数基本相同,只是W版本需要wchar_tinet_ntop需要{ {1}}。许多Windows功能都是以这种方式复制的。