远程过程调用和 MIDL:如何使用 [out] 属性实现功能?
Remote Procedure Call and MIDL: How to implement function with [out] attribute?
我正在使用 C++ 中的接口定义语言和远程过程调用编写服务器和客户端。我可以使用 [in] 属性将数据从客户端发送到服务器。现在我希望服务器将数据发送回客户端。但是我没有收到正确的数据。
我在.idl接口中定义函数如下:
[
//uuid and verison define here
]
interface utility{
void sendData([in] int numIn, [out] int *numOut);
}
MIDL 文档说
An [out]-only parameter is assumed to be undefined when the remote procedure is called and memory for the object is allocated by the server.
所以在client.cpp中,我实例化变量并调用函数。
RpcTryExcept{
int *num;
sendData(hBinding, 123, num);
}
在server.cpp,
void sendData(handle_t IDL_handle, int numIn, int *numOut){
numOut = new int[3];
numOut[0] = 1;
numOut[1] = 2;
numOut[2] = 3;
}
我在客户端打印int数组,得到3个随机数。我还尝试先在客户端定义尺寸。
int *num = new int[3]
。这次可以把numOut[0]的值传给client了,但是其他的索引都乱了。我也尝试过 char 数组,但效果不佳。也许我误会了什么。谁能给我一些想法?谢谢。
代码
void sendData(handle_t IDL_handle, int numIn, int *numOut){
numOut = new int[3];
numOut[0] = 1;
numOut[1] = 2;
numOut[2] = 3;
}
仅更改指针参数的值副本并导致内存泄漏。
我怀疑实现应该看起来像
void sendData(handle_t IDL_handle, int numIn, int *numOut){
*numOut = 42;
}
对于 return 带有 [out]
参数的数组,签名更像是
void sendData(handle_t IDL_handle, int numIn, int **numOut);
再次检查您的 IDL 定义。
我正在使用 C++ 中的接口定义语言和远程过程调用编写服务器和客户端。我可以使用 [in] 属性将数据从客户端发送到服务器。现在我希望服务器将数据发送回客户端。但是我没有收到正确的数据。
我在.idl接口中定义函数如下:
[
//uuid and verison define here
]
interface utility{
void sendData([in] int numIn, [out] int *numOut);
}
MIDL 文档说
An [out]-only parameter is assumed to be undefined when the remote procedure is called and memory for the object is allocated by the server.
所以在client.cpp中,我实例化变量并调用函数。
RpcTryExcept{
int *num;
sendData(hBinding, 123, num);
}
在server.cpp,
void sendData(handle_t IDL_handle, int numIn, int *numOut){
numOut = new int[3];
numOut[0] = 1;
numOut[1] = 2;
numOut[2] = 3;
}
我在客户端打印int数组,得到3个随机数。我还尝试先在客户端定义尺寸。
int *num = new int[3]
。这次可以把numOut[0]的值传给client了,但是其他的索引都乱了。我也尝试过 char 数组,但效果不佳。也许我误会了什么。谁能给我一些想法?谢谢。
代码
void sendData(handle_t IDL_handle, int numIn, int *numOut){
numOut = new int[3];
numOut[0] = 1;
numOut[1] = 2;
numOut[2] = 3;
}
仅更改指针参数的值副本并导致内存泄漏。
我怀疑实现应该看起来像
void sendData(handle_t IDL_handle, int numIn, int *numOut){
*numOut = 42;
}
对于 return 带有 [out]
参数的数组,签名更像是
void sendData(handle_t IDL_handle, int numIn, int **numOut);
再次检查您的 IDL 定义。