我试图将从C#库导出的结构数组传递给C ++代码。目的是将结构的SAFEARRAY从c ++传递到c#。

我已按照

http://limbioliong.wordpress.com/2011/07/16/marshaling-a-safearray-of-managed-structures-by-com-interop-part-2/

但是通过调用GetRecordInfoFromTypeInfo得到此错误

0x80028019旧格式或无效的类型库。

最佳答案

如果您不需要Disp接口,则应执行以下操作:

void MyMethod([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] MyStruct[] data, long size);


如果您需要使用SAFEARRAY,我希望以下工作有效(但是我不确定100%,因为目前没有Windows计算机可用):

void MyMethod([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_USERDEFINED)] MyStruct[] data);


如果您有能力将struct更改为class,那么这也将起作用,并且可以避免UDT的麻烦:

void MyMethod([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_UNKNOWN)] MyStruct[] data);

10-08 04:30