传递包含其他SAFEARRAY的结构的SAFEARRAY

时间:2018-03-24 13:51:01

标签: c++ windows com atl

我在.ild文件中定义了一些结构,这些结构被打包到[uuid(/*omitted*/)] struct Port { USHORT Num; }; [uuid(/*omitted*/)] struct Descriptor { BSTR Name; SAFEARRAY(struct Port) Ports; }; // Inteface method HRESULT GetDescriptors([out, retval] SAFEARRAY(struct Descriptor)* descriptor) 并传递给C#客户端......

var descriptors = comObject.GetDescriptors();

我可以在C ++端成功解压缩并使用数组。问题是当我尝试使用以下内容从C#调用方法时...

Descriptor

我得到一个例外陈述......

  

System.TypeLoadException:'无法封送类型的字段'端口'   'ComObjectLib.Descriptor':没有编组   支持这种类型。'

这是奇怪的地方。如果我添加var descriptor = new Descriptor(); descriptor.Ports = new Port[0]; // Works as expected. var descriptorsFromCom = comObject.GetDescriptors(); 的虚拟实例化并在C#代码中的任何位置初始化它的字段,则编组按预期工作。

    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="Column0" Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition x:Name="Row0" Height="{Binding ElementName=grid, Path=ColumnDefinitions[0].Width}" />
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

是什么给出了?

0 个答案:

没有答案