RPC C++ 服务器端动态端点
Posted
技术标签:
【中文标题】RPC C++ 服务器端动态端点【英文标题】:RPC C++ server side dynamic endpoint 【发布时间】:2017-10-05 13:37:25 【问题描述】:我正在做一个 rpc 服务器/客户端项目。硬编码的端点版本运行良好,现在我想让服务器动态设置端点。
我做了一些研究,我需要使用RpcNsBindingExport()
函数将名称服务数据库导出到服务器,然后客户端可以获得可用的绑定信息。服务器代码可以编译,但运行服务器时出现错误。错误消息说:
函数 _main 中引用的 LNK2019 未解析的外部符号 __imp__RpcNsBindingExportA@20
这是我的 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()
的用法可能是错误的。
感谢您的任何建议和想法。
【问题讨论】:
请提供minimal reproducible example。特别是您显示的代码中没有main
,但这似乎是错误所在
您说“我运行服务器时出错”,但错误是链接器错误...
"不知道有没有遗漏,或者RpcNsBindingExport()
的用法不对"这样的错误(unresolved external symbol i>) 在库函数调用上,最常见的原因是没有链接到定义函数的库 (.lib),而不是因为它的一些奇怪用法(如果是 - 你会得到编译错误,而不是链接错误)。请详细说明“rpcrt4.lib 和 rpcns4.lib 都包含在项目中。”是什么意思(“包含”这个词是什么意思? )。
来自 MSDN 文档:注意此函数在 Windows Vista 及更高版本的操作系统上不受支持。 也许库不包含该函数?
【参考方案1】:
通常,当编译器找不到 lib 文件时,会发生错误 LNK2019 unresolved external symbol。尝试将 .lib 文件的完整路径放在链接器下拉列表下的 Additional dependencies 中。并检查构建选项(x32 或 x64)。 x32 库不能与 x64 应用程序一起使用。
【讨论】:
rpcns4.lib 是 x32 lib,但我的构建选项是 X64。我将其更改为 x32,现在可以使用。感谢您指出。以上是关于RPC C++ 服务器端动态端点的主要内容,如果未能解决你的问题,请参考以下文章