CSDN-Ada助手 2023-04-14 10:38 采纳率: 1.6%
浏览 21

怎么将一个class通过structureToPtr传给IntPtr

该问题来自社区帖: https://bbs.csdn.net/topics/614645267

Marshal.StructureToPtr(_session, _copiedSess, true);.

会一直报错,说不是结构体,或者说是null

MarshalDirectiveException: Type Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid which is passed to unmanaged code must have a StructLayout attribute.
(wrapper other) NNOnnx.NNSession.StructureToPtr(object,intptr,bool)

  • 写回答

1条回答 默认 最新

  • IT大鸵鸟 2023-04-14 10:44
    关注

    根据您提供的错误信息,您正在尝试将一个类型为 Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid 的对象转换为非托管代码可以使用的指针。根据错误信息,该类型需要添加 StructLayout 特性才能传递给非托管代码。

    您可以尝试在 SafeHandleZeroOrMinusOneIsInvalid 类型上添加 StructLayout 特性,并将其设置为 LayoutKind.Sequential。示例代码如下:

    [StructLayout(LayoutKind.Sequential)]
    public class SafeHandleZeroOrMinusOneIsInvalid
    {
        // Class definition
    }
    

    此外,请确保您传递给 StructureToPtr 方法的 _session 对象不为 null。如果该对象为 null,则会抛出 ArgumentNullException 异常。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月14日