0

MIDL プロトコル (RPC) を使用しており、unsigned char の割り当てられたメモリへの参照によってポインターを渡そうとしています。ただし、配列の最初の属性のみが正しい値で埋められています。

中間コード:

 // File FPGA_RPC_MIDL.idl
 [
    // A unique identifier that distinguishes this interface from other interfaces.
uuid(00000001-EAF3-4A7A-A0F2-BCE4C30DA77E),

// This is version 1.0 of this interface.
version(1.0)
 ]

interface FPGA_RPC_MIDL // The interface is named FPGA_RPC_MIDL
{

    int get_Message([ref, out]  unsigned char* message_out);

}

サーバーコード:

int get_Message(
/* [ref][out] */ unsigned char *message_out)
{
   message_out[0] = 0x25;
   message_out[1] = 0x26;
   message_out[2] = 0x27;
   return 0;'
}

クライアントコード:

int main
{
      message_out = (unsigned char *)malloc(sizeof(unsigned char)*3);
      get_Message(message_out);
      printf("%x, %x, %x",message_out[0],message_out[1],message_out[2])
}

出力:

25,0,0

すべての配列を参照渡しするにはどうすればよいですか?

4

1 に答える 1

1

[ref, out]この状況で使用する属性のセットは間違っています。出力値として参照によって単一の文字を返すように MIDL に指示get_Message()しているため、データがマーシャリングされる方法ですが、コードが望んでいるものではありません。代わりに複数文字の配列を埋めたいので、それに応じてマーシャリングする必要があります。

これを試して:

int get_Message([in, out, size_is(3)] unsigned char message_out[]);

または単に:

int get_Message(unsigned char message_out[3]);

詳細については、MSDN を参照してください。

MIDL 配列

于 2014-05-31T20:47:06.673 に答える