我正在使用MIDL协议(RPC),并且试图通过引用将指针传递给未分配字符的已分配内存。但是只有数组的第一个属性填充了正确的值。

MIDL代码:

 // 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


如何通过引用传递所有数组?

最佳答案

[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 Arrays

关于c++ - Windows C-通过使用MIDL协议(protocol)引用未签名字符的动态分配内存来传递指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23974168/

10-13 02:07