我试图将从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);