我正在使用以下结构通过PInvoke封送数据
[StructLayout(LayoutKind.Sequential)]
struct Data
{
int id;
IntPtr state;
object obj;
}
在Windows上一切正常,但是在Linux上我得到了错误:
无法封送'Data'类型的字段'obj':无效的托管/非托管类型组合(不支持与COM接口指针之间的封送处理)。
为什么? 是否可以禁用特定字段的封送处理?
答案 0 :(得分:0)
object obj;
属性无效
您可以尝试使用IntPtr obj;
obj
的实际类型是什么?
答案 1 :(得分:0)
挖掘CLR源,我发现问题确实是Linux特有的,并且与仅Windows的COM互操作功能相关。
所以我已经使用IntPtr来解决obj(如@Simonare建议)和GCHandle的问题。