2012-04-02 32 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