Marshal.StructureToPtr使Visual Studio崩溃

时间:2010-07-27 00:42:14

标签: c# visual-studio-2010 unmanaged

我正在开发一个自定义调试引擎,当我将我的结构编组到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 个答案:

答案 0 :(得分:6)

如果以前从未分配过非托管结构,则不应使用deleteOld。 deleteOld仅在您覆盖以前的结构时才适用(例如,为了解除分配字符串引用)。这应该有效:

Marshal.StructureToPtr(documentContext, ptrDocContext, false);