代码之家  ›  专栏  ›  技术社区  ›  Adam Driscoll

marshal.structureToptr崩溃Visual Studio

  •  2
  • Adam Driscoll  · 技术社区  · 14 年前

    我正在开发一个自定义调试引擎,当我将结构封送到 IntPtr Visual Studio崩溃(正在调试的不是调试器)。

    我的结构只不过是:

    public struct DocumentContext : IDebugDocumentContext2, IDebugCodeContext2
    {
        private string _fileName;
    
        //.....Implementation of interfaces
    }
    

    我的编组代码如下:

            var documentContext = new DocumentContext(_node.FileName);
            var size = Marshal.SizeOf(documentContext);
            IntPtr ptrDocContext = Marshal.AllocHGlobal(size);
            //This is what is crashing 
            //I don't have a chance to catch anything, it just craps out
            //Event log says faulting dll is nt.dll
            Marshal.StructureToPtr(documentContext, ptrDocContext, true); 
    

    我错过什么了吗?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Dan Bryant    14 年前

    如果以前从未分配过非托管结构,则不应使用DeleteOld。DeleteOld仅适用于覆盖以前的结构(例如,取消分配字符串引用)的情况。这应该有效:

    Marshal.StructureToPtr(documentContext, ptrDocContext, false);