1

我有一个 C++ 代码(dll),我需要从我的 C# 代码中调用它。当我使用固定指针时,它会引发访问冲突异常。我不确定我错过了什么。

以下是创建固定指针的类。

public class PinnedCmdCtrlBlock
    {
        GCHandle handle;
        CmdCtrlBlock cmd; 

 //This is the structure that needs to be pinned
        public IntPtr CmdCtrlBlockPtr;

        public PinnedCmdCtrlBlock()
        {
            cmd = new CmdCtrlBlock();
            handle = GCHandle.Alloc(cmd,GCHandleType.Pinned);

           CmdCtrlBlockPtr = handle.AddrOfPinnedObject();                
        }

        ~PinnedCmdCtrlBlock()
        {
            handle.Free();
        }
    };

以下是调用实际 C++ 非托管代码的代码

PinnedCmdCtrlBlock pinPtr = new PinnedCmdCtrlBlock();
int addr = PinPtr.CmdCtrlBlockPtr.ToInt32();
HartConnection.HartCmd(0, ref  addr);
4

0 回答 0