2012-04-02 146 views
0

我无法链接RtlIpv4StringToAddressExW()。这是我的程序的简化版本。如何链接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 [email protected] 

有谁知道什么地方出错了?

+0

有什么理由不使用['inet_addr'(http://msdn.microsoft.com/en-us/library/windows/desktop/ms738563( v = vs.85)的.aspx)?我知道它不处理端口,但你的示例代码没有通过(并使用文字...)。 – Deanna 2012-04-02 10:19:58

+0

@Deanna,这个功能不常见吗? – kiewic 2012-04-02 13:38:08

+0

我不知道,我只用过'inet_addr'。 – Deanna 2012-04-02 14:59:19

回答

0

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

from docs

如果有一个lib到编译指示注释,它将是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); 
+0

太棒了!谢谢! – kiewic 2012-04-02 15:42:34