Могу ли я создать заголовок из Статической библиотеки?

86
10

У меня есть библиотека (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 и ws2tcpip.h под GCC/Cygwin

спросил(а) 2012-06-17T02:42:00+04:00 8 лет назад
1
Решение
54

Нет, нет. Не без разбора библиотеки и много догадок. Считайте это безнадежным, в общем.

Однако такие функции, как 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 принимает wchar_t а inet_ntop принимает char. Многие функции Windows дублируются таким образом.

ответил(а) 2012-06-17T02:59:00+04:00 8 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема