2017-10-05 142 views
0

我在做一個rpc服務器/客戶端項目。硬編碼的端點版本運行良好,現在我想讓服務器動態設置端點。RPC C++服務器端動態端點

我做了一些研究,需要使用RpcNsBindingExport()函數爲服務器導出名稱服務數據庫,然後客戶端才能獲得可用的綁定信息。服務器代碼可以編譯,但運行服務器時出現錯誤。該錯誤消息說: LNK2019解析的外部符號__imp__RpcNsBindingExportA @ 20函數引用_main

這裏是我的server.cpp代碼:

main(){ 
    //choose protocol sequence 
    status = RpcServerUseProtseq(
     pszProtocolSequence, 
     RPC_C_PROTSEQ_MAX_REQS_DEFAULT, 
     pszSecurity 
    ); 
    if (status) exit(status); 

    //get binding info for server 
    RPC_BINDING_VECTOR *binding_vector; 
    status = RpcServerInqBindings(&binding_vector); 

    //Export to a name service database for advertising 
    status = RpcNsBindingExport(
     RPC_C_NS_SYNTAX_DEFAULT, 
     (unsigned char *)"hostname", 
     midl_v1_0_s_ifspec, 
     binding_vector, 
     NULL 
    ); 

    if (status) exit(status); 

    //reg server 
    status = RpcEpRegister(
     hello_v1_0_s_ifspec, 
     binding_vector, 
     NULL, 
     (unsigned char *)annotion 
    ); 

    //listen 
    if (status) exit(status); 

    status = RpcServerListen(cMinCalls, 
     RPC_C_LISTEN_MAX_CALLS_DEFAULT, 
     fDontWait); 

    if (status) exit(status); 
} 

兩個rpcrt4.lib和rpcns4。 lib在項目中鏈接。我不知道是否缺少任何東西,或者RpcNsBindingExport()的用法是錯誤的。

感謝您的任何建議和想法。

+2

請提供[mcve]。特別是在你顯示的代碼中沒有'main',但是這似乎是錯誤是 – user463035818

+1

你說「錯誤,當我運行服務器」但錯誤是一個鏈接器錯誤... – user463035818

+0

「_我不知道是否缺少任何東西,或者'RpcNsBindingExport()'的用法是錯誤的_「在庫函數調用中出現這種錯誤(_unresolved external symbol_),最常見的原因是沒有鏈接到所述庫(.lib),其中該函數被定義,而不是因爲它的一些奇怪的用法(如果是 - 你會得到編譯錯誤,而不是鏈接錯誤)。請詳細說明「_poth rpcrt4.lib和rpcns4.lib包含在項目中的**」是什麼意思。「(」包含「一詞是什麼意思?)。 –

回答

0

通常,錯誤LNK2019未解析的外部符號發生在編譯器無法找到lib文件時。嘗試將鏈接器下拉下的.lib文件的完整路徑放在附加依賴​​項中。並檢查構建選項(x32或x64)。 x32 lib不能用於x64應用程序或其他。

+0

rpcns4.lib是x32 lib,但我的構建選項是X64。我將其更改爲x32,現在可以使用。感謝您指出。 – tianhuaf