2017-10-05 141 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