我在.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>
是什么给出了?