将带有符合数组的IDL结构转换为标头

时间:2014-03-25 15:44:23

标签: visual-studio-2010 visual-c++ rpc midl

我需要通过符合数组的Microsoft RPC结构传递。这是我在IDL中写的方式:

struct BarStruct
{
  byte a;
  int b;
  byte c;
long lArraySize;
[size_is(lArraySize)] char achArray[*];
};

生成标题:

struct BarStruct
    {
    byte a;
    int b;
    byte c;
    long lArraySize;
    char achArray[ 1 ];
    } ;

为什么achArray的固定长度为1?如何将带有例如10个元素的数组传递给它?

1 个答案:

答案 0 :(得分:0)

这样的事情:

BarStruct* p = (BarStruct*)CoTaskMemAlloc(
    offsetof(BarStruct, achArray) + 10*sizeof(char));

基本上,您需要分配内存,就好像结构最后有achArray[10]成员一样。 offsetof(BarStruct, achArray)为您提供结构固定部分的大小,但不包括achArray。为此,您可以添加可变大小的数组。