Как связать функцию RtlIpv4StringToAddressExW? - PullRequest
0 голосов
/ 02 апреля 2012

Я не могу связать RtlIpv4StringToAddressExW (). Это упрощенная версия моей программы.

#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")

#include <Windows.h>
#include <cstdio>

#include <MSTcpIP.h>

HRESULT doMAin()
{
    LONG error;
    PSOCKADDR_IN sin4;

    error = RtlIpv4StringToAddressExW(
        L"127.0.0.1",
        TRUE,
        &sin4->sin_addr,
        &sin4->sin_port);

    return S_OK;
}

И ошибка, которую я получаю:

main.obj : error LNK2001: unresolved external symbol __imp__RtlIpv4StringToAddressExW@16

Кто-нибудь знает, что может быть не так?

1 Ответ

1 голос
/ 02 апреля 2012

"Библиотека импорта, содержащая функцию RtlIpv4StringToAddressEx, не включена в комплект для разработки программного обеспечения Microsoft Windows (SDK), выпущенный для Windows Vista. Функция RtlIpv4StringToAddressEx включена в библиотеку импорта Ntdll.lib, включенную в набор драйверов Windows (WDK) Приложение может также использовать функции GetModuleHandle и GetProcAddress, чтобы извлечь указатель на функцию из файла Ntdll.dll и вызвать эту функцию. "

из документов .

Если бы был комментарий lib to pragma, это был бы Ntdll.lib. Чтобы повторить документы, вы можете либо получить один из DDK, либо GetProcAddress присоски.

GetProcAddress будет выглядеть

  typedef LONG (NTAPI *pfRtlIpv4StringToAddressEx)(PCWSTR,BOOLEAN,IN_ADDR *,PUSHORT);
  pfRtlIpv4StringToAddressEx pRtlIpv4StringToAddressEx = (pfRtlIpv4StringToAddressEx)GetProcAddress(GetModuleHandle("ntdll.dll"), "RtlIpv4StringToAddressExW");
  error = (*pRtlIpv4StringToAddressEx)(
    L"127.0.0.1",
    TRUE,
    &sin4->sin_addr,
    &sin4->sin_port);
...