Я пишу сервер и клиент, используя язык определения интерфейса и удаленный вызов процедур на С++. Я могу отправлять данные с клиента на сервер с атрибутом [in]. Теперь я хочу, чтобы сервер отправлял данные обратно клиенту. Но мне не удалось получить правильные данные.
Я определяю функцию в интерфейсе .idl, как показано ниже:
[
//uuid and verison define here
]
interface utility{
void sendData([in] int numIn, [out] int *numOut);
}
Документ MIDL Говорит, что
Параметр только для [out] считается неопределенным при вызове удаленной процедуры и выделении памяти для объекта сервером.
Итак, в 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] клиенту, но все остальные индексы перепутаны. Я также пробовал массив символов, но ничего хорошего. Может я что-то недопонимаю. Может ли кто-нибудь дать мне несколько идей? Спасибо.