从Win32 RPC调用返回字符串
Return a string from Win32 RPC call
我正在尝试进行一个RPC调用,该调用从RPC服务器请求2个数字和一个字符串,IDL如下所示:
void GetCurrentStatus([in] handle_t hBinding, [out, ref] DWORD *dwRef1, [out, ref] DWORD *dwRef2, UINT *nLength, [out, size_is(, *nLength)] LPWSTR *pszName);
在服务器端调用中,我这样做:
// name = std::wstring
*pszName = (wchar_t*)midl_user_allocate(name.length()+1 * sizeof(wchar_t));
_tcscpy(*pszName, name.c_str());
*nLength = name.length();
但是,任何从客户端调用的尝试都不会导致返回错误The array bounds are invalid.
从RPC调用返回字符串的正确方法是什么?
谢谢,J
如果您对此有选择,请使用BSTR
(即SysAllocString
)。RPC知道关于这种数据类型的所有信息,以及如何复制它并找到它的长度。
只是
[out, retval] BSTR* pstrName
足够了,不需要单独的长度参数。
服务器无法将字符串值传递回客户端,因为它不知道如何整理字符串。。
当您使用BSTR类型时,服务器知道字符串的长度。BSTR前面必须有一个4字节长度的字段,并以一个空的2字节字符结束。
您写的地方:
*nLength = name.length();
我相信你需要
*nLength = (name.length() + 1) * sizeof(WCHAR);
特别是,如果有一个空(长度为零)字符串,那么返回size_is(0)
数组是不合法的——因此必须为终止NUL(L' '
)的字符串添加空间。
您还希望以字节为单位提供大小,其中每个Unicode字符使用两个字节,因此必须乘以字符大小。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- C 字符串返回字符串的整数/双精度/长整型值
- 如何从COM模块中的函数返回字符串数组?
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- 我如何在函数 cpp 中返回字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 格式化返回字符串C++
- 返回字符串vs通过引用传递字符串以更新值
- 如何在不使用 STL 的情况下从函数反转字符串后返回字符串C++?
- 使用 ctypes 从函数返回字符串C++会给出大的 int,而不是 char 指针
- 从 C++ 中的模板函数返回字符串和整数
- 返回字符串的散点回文计数
- C++重载字符串 [] 运算符以返回字符串和
- 返回字符串和不同向量数据类型的映射C++
- 字符串函数不返回字符串? C++
- 从函数返回字符串C++错误
- 如何在返回字符串的函数中不忽略void值
- 我想将字符串转换为 Json 格式并返回字符串向量作为答案
- C - 返回字符串时的分割故障
- 使用向量和字符串函数返回字符串