我有一个 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);