C++でインターフェイス定義言語とリモートプロシージャコールを使用してサーバーとクライアントを作成しています。 [in]属性のクライアントからサーバーにデータを送信できます。今私はサーバーがクライアントにデータを返信したい。しかし、私は正しいデータを受け取れませんでした。リモートプロシージャコールとMIDL:[out]属性で関数を実装する方法は?
以下のように私はの.idlインタフェースに関数を定義:MIDLドキュメントは、リモートプロシージャである場合
アン[OUT]のみのパラメータは未定義されると仮定されていることを言う
[ //uuid and verison define here ] interface utility{ void sendData([in] int numIn, [out] int *numOut); }
オブジェクトのメモリがサーバーによって割り当てられます。
したがって、client.cppでは、変数をインスタンス化してfuncitonを呼び出します。 server.cppで
RpcTryExcept{
int *num;
sendData(hBinding, 123, num);
}
、
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