0
我在C++中使用接口定義語言和遠程過程調用編寫服務器和客戶端。我可以使用[in]屬性將數據從客戶端發送到服務器。現在我想要服務器將數據發送回客戶端。但是我沒有收到正確的數據。遠程過程調用和MIDL:如何使用[out]屬性實現函數?
予定義的.idl接口功能如下:
[
//uuid and verison define here
]
interface utility{
void sendData([in] int numIn, [out] int *numOut);
}
的MIDL文件說,
一個[out]假定-only參數爲未定義當遠程過程是所謂的對象和內存是由服務器分配的。
所以在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]的值傳遞給客戶端,但其他索引全部搞砸了。我嘗試了char數組,但沒有好處。也許我誤解了一些東西。任何人都可以給我一些想法嗎?謝謝。
謝謝,它的工作原理。現在我有點困惑。當服務器向客戶端發送一個int數組或float數組(我讀取文件到float數組)時,它可以在IDL中使用float *或float []。但是,當客戶端發送數據到服務器時,它顯示不同的行爲。我會盡力弄清楚。 – tianhuaf