1
我正在学习C Windows RPC编程。这里是我编写和编译没有错误的虚拟RPC服务器的源代码:Windows RPC编程错误:LNK 2019无法解析的外部符号RPCServerListen
#include <stdio.h>
#include "md5_h.h"
#include "rpc.h"
#include "rpcndr.h"
int main() {
RPC_STATUS status;
status = RpcServerUseProtseqEp(
(RPC_WSTR)("ncacn_ip_tcp"),
RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
(RPC_WSTR)("9191"),
NULL);
if (status) { exit(status); }
status = RpcServerRegisterIf(
md5_v1_0_c_ifspec,
NULL,
NULL);
if (status) { exit(status); }
status = RpcServerListen(
1,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
FALSE);
if (status) { exit(status); }
return 0;
}
void __RPC_USER midl_user_free(void* p) {
free(p);
}
void md5(const unsigned char* szMsg) {
printf("voila %s\n", szMsg);
}
midl文件也可以编译而不会出错。如预期的那样,MIDL汇编产生md5_s.c
和md5_c.c
。下面是md5.idl
文件如果需要的话:
[
uuid(D86FBC01-D6A7-4941-9243-07A4EC65E8CB),
version(1.0),
]
interface md5
{
void md5([in, string] const char* szMsg);
};
在联动阶段以下错误产生:
LNK2019: unresolved external symbol __imp__RpcServerListen referenced in function main
我对每一个具体的RPC的功能相同的错误,如RpcServerRegisterIf
或RpcServerUseProtseqEp
。我正在使用Microsoft Visual Studio 2013.
我认为这来自一个缺少包括;但我无法确定哪一个。我试图包括rpc.h
,没有任何改变。
我必须在我的项目中包含制作的md5_s.c
吗?我已经尝试过,但没有解决任何问题。
感谢您的帮助!
谢谢,这解决了我遇到的问题;但你到底是怎么想出来的? – philippe
@philippe这是一个链接错误。并非所有的.lib文件都包含在默认列表中。所以有时你需要添加额外的.lib文件。例如:winsock,shell API和e.t.c.需要手动添加.lib文件。当链接器发出错误时,请检查MSDN中的页脚注释,它会列出要使用的库文件,本例中为Rpcrt4.lib。 – shebaw