Windows RPC 初体验


RPC的需求还是很多的,例如,我们注入一个dll到某程序中,而控制端是独立的exe。
此时 exe <=RPC=> dll

有没有一款 好用的简单的RPC呢?
笔者也有这个需求,经朋友推荐和演示,了解并尝试使用了 Windows RPC,发现真的简单。

需求

教程直接官网:
https://docs.microsoft.com/en-us/windows/win32/rpc/tutorial
一步一步做非常简单。
无需赘言。

挑战

我认为 使用 Windows RPC 的 最大挑战为 字符串(或Buffer) 的回传
为了实现能从服务端 返回给 客户端字符串,我查询了若干资料。为了防止以后用的时候再去找,所以记录于此。

https://stackoverflow.com/questions/6256400/return-a-string-from-win32-rpc-call

使用中可能遇到的问题

  • 会生成 Hello_h.hHello.h 什么区别?
    我认为:~前者的 h意思是high-version.指rpc5 ,而后者指的是 rpc4~,include 其中之一即可
  • 添加库 rpcrt4.lib
  • 照抄例子会报错1
    hello_ClientIfHandle 它会提示你它不存在,实际它就定义在 自动生成的 hello.h文件中,它的实际名字 并不是这个,而是 类似 INTERFACENAME_v1_0_c_ifspecINTERFACENAME_v1_0_s_ifspec找到它 替换 例子。

在这里插入图片描述

  • 照抄例子会报错2
    有一步让你添加两个函数 在服务端 :
    在这里插入图片描述
    有两种解决方案:

    • 创建 .c 文件
      你需要定义一个 .c 文件或者在里面进行定义
    • 直接 在 cpp 中进行声明
      exter "c" void abc(int a);声明一句
  • IDL 文件语法
    在你尝试完成第一个例子后,如果你试图增加更多的函数,发现 IDL 报错,就需要注意 IDL 里的类型并不完全和C相同,eg: bool => boolean

  • 提示: funcXXX 无法重载具有外部“C”链接的函数 参见 “rprint” 的声明
    在这里插入图片描述
    原因是你的声明 和它自动生成的 函数不一致,查看:

eg: 我这里提示错误:

在这里插入图片描述

对比一下生成的代码 , 看发现:

显然 类型不完全一致,所以我们要修改 自己写的函数签名。

在这里插入图片描述
在这里插入图片描述

这样将可以排除此种错误了。

目前遇到的问题就是以上。

资料

https://docs.microsoft.com/en-us/windows/win32/rpc/tutorial

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值