我有一个.net应用程序,它可以在32位环境中运行,并且可以在wow64环境中以64位操作系统运行。
现在我正在创建一个实用程序(32位)来为应用程序创建转储。
我使用以下代码创建转储。
[DllImport("dbghelp.dll", EntryPoint = "MiniDumpWriteDump", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
static extern bool MiniDumpWriteDump(IntPtr hProcess, uint processId, SafeHandle hFile, uint dumpType, ref MiniDumpExceptionInformation expParam, IntPtr userStreamParam, IntPtr callbackParam);
此API调用在32位操作系统中执行良好,但在64位操作系统中失败。
有人在64位操作系统中为32位应用程序创建了转储吗?请帮忙。
答案 0 :(得分:1)
确保您的MiniDumpExceptionInformation结构的结构定义上有Pack = 4。
这是我在32位和64位C#应用程序中使用的内容:
[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct MINIDUMP_EXCEPTION_INFORMATION
{
public uint ThreadId;
/// PEXCEPTION_POINTERS->_EXCEPTION_POINTERS*
public IntPtr ExceptionPointers;
[MarshalAs(UnmanagedType.Bool)]
public bool ClientPointers;
}
但是我们总是使用匹配的体系结构(32位应用程序在32位进程上创建崩溃转储等)。