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