Je travaille sur un moteur de débogage personnalisé et lorsque je marshal ma structure à un IntPtr
se bloque Visual Studio (celui qui est débogué pas le débogueur).Marshal.StructureToPtr se bloque Visual Studio
Mon struct est un peu plus:
public struct DocumentContext : IDebugDocumentContext2, IDebugCodeContext2
{
private string _fileName;
//.....Implementation of interfaces
}
Mon code marshalling ressemble à ceci:
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);
Est-ce que je manque quelque chose?
Ahhh qui a fonctionné. Merci. J'étais un peu flou sur ce drapeau. –
L'avertissement dans la documentation est un peu subtil. Il indique clairement que vous pouvez perdre de la mémoire si vous passez false, mais seulement plus bas, cela clarifie-t-il que si la structure ne contient pas de données valides, le passage true échouera. Essentiellement, il essaie de libérer la mémoire pointée par la référence de chaîne dans la structure, mais le pointeur n'est pas valide et, voila, un crash. –