我正在尝试将从c#库导出的struct数组传递给c ++代码。目标是将结构的SAFEARRAY从c ++传递给c#。
我已按照
的说明操作但是通过调用GetRecordInfoFromTypeInfo
获得此错误0x80028019旧格式或无效的类型库。
答案 0 :(得分:1)
如果您不需要调度接口,则应遵循以下规则:
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);
答案 1 :(得分:1)
结构是否包含字符串?如果是这样,请确保标记它们[MarshalAs(UnmanagedType.BStr)]。 COM中存在限制:结构数组中的字符串必须是BSTR。 TLBExp默认为LPWSTR,然后调用终止。见这里:http://msdn.microsoft.com/en-us/library/z6cfh6e6(v=vs.100).aspx