在Linux上进行结构字段封送处理失败

时间:2019-02-06 12:32:49

标签: .net-core pinvoke marshalling

我正在使用以下结构通过PInvoke封送数据

[StructLayout(LayoutKind.Sequential)]
struct Data
{
  int id;
  IntPtr state;
  object obj;
}

在Windows上一切正常,但是在Linux上我得到了错误:

  

无法封送'Data'类型的字段'obj':无效的托管/非托管类型组合(不支持与COM接口指针之间的封送处理)。

为什么? 是否可以禁用特定字段的封送处理?

2 个答案:

答案 0 :(得分:0)

object obj;属性无效

您可以尝试使用IntPtr obj;

obj的实际类型是什么?

答案 1 :(得分:0)

挖掘CLR源,我发现问题确实是Linux特有的,并且与仅Windows的COM互操作功能相关。

所以我已经使用IntPtr来解决obj(如@Simonare建议)和GCHandle的问题。