如何链接RtlIpv4StringToAddressExW函数?

时间:2012-04-02 00:19:27

标签: winapi winsock

我无法链接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 个答案:

答案 0 :(得分:1)

“包含RtlIpv4StringToAddressEx函数的导入库未包含在为Windows Vista发布的Microsoft Windows软件开发工具包(SDK)中.RtlIpv4StringToAddressEx函数包含在Windows驱动程序工具包(WDK)中包含的Ntdll.lib导入库中应用程序还可以使用GetModuleHandle和GetProcAddress函数从Ntdll.dll中检索函数指针并调用此函数。“

来自docs

如果有一个lib到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);