4

32ビット環境で実行するように設計された.netアプリがあり、wow64環境の64ビットOSで実行されます。

現在、アプリケーションのダンプを作成するためのユーティリティ (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 ビット OS では正常に実行されますが、64 ビット OS では失敗します。

64ビットOSで32ビットアプリのダンプを作成した人はいますか?Pls help.

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 に答える