私の小さなテストアプリケーションでは非常に奇妙な問題が発生しています。そして問題によって、私はそれがクラッシュすることを意味する...難しい。例外はありません(少なくとも、私が捕まえることはできません)、 "Blah Blahが応答を停止しました..."というメッセージがスローされます。 のアプリを実行すると、x64、リリースモード、およびIDEの外部でアプリが実行されるとクラッシュします。 x86モードで実行した場合、またはx64でIDEで実行した場合、またはx64でDEBUGとしてスタンドアロンで実行すると正常に動作します。IDEの外でリリースモードでx64 .NET 4.0アプリケーションをクラッシュする
私はp/invoke PeekMessageコールに絞り込んだ。だから、私が書いたことを見て、私が正しいことをしているかどうか教えてもらうために、私はここで華麗な心が必要です。真剣に、私は私のf **の王の心を失うことになる。私は2台のコンピュータでこれを試してみましたが、どちらも同じ動作を示します。私はこれが.NET 4.0のバグかもしれないと少しは心配しています。
とにかく、ここにp/invokeコードがあります。あなたが奇数あるいは単なる愚かな何かを見る場合は私に知らせてください:
ここでのPeekMessageへの呼び出しです:抑制のセキュリティ属性は、クラス定義の上にあるので、それはされている:
private static bool PeekMessage()
{
MSG message = new MSG(); // Message to retrieve.
return Win32API.PeekMessage(ref message, IntPtr.Zero, 0, 0, PeekMessageFlags.NoRemove);
}
はここでのPeekMessage(NOTEです)適用:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool PeekMessage(ref MSG msg, IntPtr hwnd, uint wFilterMin, uint wFilterMax, PeekMessageFlags flags);
はここでMSGです:
[StructLayout(LayoutKind.Sequential)]
internal struct MSG
{
/// <summary>Window handle.</summary>
public IntPtr hwnd;
/// <summary>Message to process.</summary>
public uint Message;
/// <summary>Window message parameter 1.</summary>
public uint wParam;
/// <summary>Window message parameter 2.</summary>
public uint lParam;
/// <summary>Time message was sent?</summary>
public uint time;
/// <summary>Mouse pointer position.</summary>
public Point pt;
}
そして最後に、 PeekMessageFlags:
internal enum PeekMessageFlags
{
/// <summary>Keep message on the message queue.</summary>
NoRemove = 0,
/// <summary>Remove message from the queue.</summary>
Remove = 1,
/// <summary>Do not yield execution to waiting threads.</summary>
NoYield = 2
}
私は、イベントログをチェックして、私はこれだ:
Faulting application name: Tester_Graphics.exe, version: 1.0.0.0, time stamp: 0x4ec0ba85
Faulting module name: unknown, version: 0.0.0.0, time stamp: 0x00000000
Exception code: 0xc0000005
Fault offset: 0x00000000000001cb
Faulting process id: 0x1260
Faulting application start time: 0x01cca299e2c21a77
Faulting application path: D:\Code\Current\Gorgon\Branches\2.x\Dorian\Examples\Tester_Graphics\bin\Release\Tester_Graphics.exe
Faulting module path: unknown
Report Id: 20ac891f-0e8d-11e1-a5d7-bcaec5753ddd
だから、あなたはかなり右ではない何かを見た場合、私に知らせてくださいと。私はこれが私のせいではないことを嫌っています。
申し訳ありません詳細が不明な場合は、さらに詳しい情報が必要な場合はメモを残してください。
私は、わずかな間違ったパラメータ、特に文字列(UnicodeとAnsiなど)でも同様の問題がありました[このページ](http://www.pinvoke.net/default.aspx/user32.peekmessage) 'PeekMessage'の署名です。私はあなたが作品を見つけるまで、他のものを試してみることをお勧めします。 –
ランダムなメモとして、これをデバッグするのに問題があった場合、例外が発生しました。プログラムをビルドした後にロードできるとすれば、それを実行することができます。その後、通常のビジュアルスタジオをプロセスにアタッチして、PDBがあればリリースモードでもデバッグすることができます。次に、スローされた例外(CTRL + ALT + E)でブレークをオンにすると、おそらくもっと多くの情報が得られるでしょう。 –
ええ、私はそれをやると考えましたが、すぐに例外があったので、添付する時間がありませんでした。 'PeekMessage'の前に' Sleep'ディレイを追加できるようになりましたが、それは真夜中だったので、一貫した文章をほとんど作ることができなかったので、当時私には起こりませんでした。 – Mike