我正在实现一个Windows系统服务,它充当RPC服务器和对应的C++客户端。我正在使用纯Windows RPC功能。
从RPC客户端向服务器传递字符串很容易。只需在IDL文件中声明函数参数即可:
从RPC客户端向服务器传递字符串很容易。只需在IDL文件中声明函数参数即可:
[in, string] wchar_t* myString
MIDL会处理内存分配的魔法。非常好用。
返回修改后的客户端字符串也很容易:
[in, out, string] wchar_t* myString
这需要我在客户端上正确地调整字符串大小。
问题:
我需要从服务器返回字符串到客户端。我不知道客户端的大小,所以在客户端进行内存分配不是一个选项。
我可以分配非常大的内存,比如10K,足够大到可以容纳服务器可能返回的每个字符串。但这是一种巨大的资源浪费(内存、网络),而且我仍然不能确定服务器是否需要返回更大的字符串。
我尝试过的方法:
除了其他尝试之外,我尝试了 Microsoft 的 strout 示例中使用的技术。它可以在第一次调用 RPC 函数时工作,但在第二次调用时会导致服务器崩溃。