linux 上的结构字段编组失败

struct field marshaling failed on linux

我正在使用以下结构与 PInvoke 进行数据编组

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

在 Windows 上一切正常,但在 Linux 上我收到错误:

Cannot marshal field 'obj' of type 'Data': Invalid managed/unmanaged type combination (Marshaling to and from COM interface pointers isn't supported).

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

object obj; 属性 无效

你可以试试IntPtr obj;

obj 的实际类型是什么?

挖掘 CLR 资源我发现这个问题确实是 Linux 特定的,并且与 COM 互操作功能相关,该功能仅 windows。

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