4

我有一个 .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 位应用程序创建了转储吗?请帮助。

4

1 回答 1

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 位应用程序等)

于 2013-08-14T15:34:50.457 回答