Marshal.StructureToPtr аварийно завершает работу Visual Studio - PullRequest
2 голосов
/ 27 июля 2010

Я работаю над пользовательским механизмом отладки, и когда я упорядочиваю свою структуру до 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 Ответ

6 голосов
/ 27 июля 2010

Не следует использовать deleteOld, если неуправляемая структура никогда ранее не выделялась.deleteOld применим только тогда, когда вы перезаписываете предыдущую структуру (например, для освобождения ссылок на строки). Это должно работать:

Marshal.StructureToPtr(documentContext, ptrDocContext, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...