Windows RPC programming error: LNK 2019 unresolved external symbol RPCServerListen

Windows RPC programming error: LNK 2019 unresolved external symbol RPCServerListen

我正在学习 C Windows RPC 编程。这是我编写和编译没有错误的虚拟 RPC 服务器的源代码:

#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.cmd5_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 的函数都有相同的错误,例如 RpcServerRegisterIfRpcServerUseProtseqEp。我使用的是 Microsoft Visual Studio 2013.

我认为这是由于缺少包含;但我不知道是哪一个。我试图包括 rpc.h,没有任何变化。

我是否必须在我的项目中包含生成的 md5_s.c?我已经尝试过但没有解决任何问题。

感谢您的帮助!

您需要 link 对抗 Rpcrt4.lib。 如果你使用的是visual studio,在项目->属性->配置属性->链接器->输入->附加依赖项中添加。