2

コードを投稿することはできません (独自の問題) が、C# で次のエラーが発生する原因を知っている人はいますか? 通話が他のクライアントによって終了されたときに、(counterpath api を使用して) 私が作成した VOIP クライアントによってスローされています。エラーは次のとおりです。

System.AccessViolationException was unhandled
  Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
  Source="System.Windows.Forms"
  StackTrace:
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at CollabAnalysisSF.Edge.GUI.Forms.Program.Main() in d:\data\beyerss\Desktop\client\GUI\ARGui\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

更新:
私たちが使用していたライブラリの 1 つが、私たちが知らなかったイベントを送信していたことが判明しました。問題はそこのどこかにありました。今修正しました。

4

3 に答える 3

3

いくつかの可能性のリスト:

  • オブジェクトが破棄された後に使用されています。これは、管理対象オブジェクトをファイナライザーで破棄している場合によく発生します (そうすべきではありません)。
  • 使用しているオブジェクトの 1 つの管理されていない実装にバグがあり、プロセス メモリ ヒープが破損しています。DirectX、GDI などでよく発生します。
  • 管理対象と管理対象外の境界でのマシャリングには欠陥があります。コードのアンマネージ部分で使用する前に、必ずマネージ ポインターを固定してください。
  • あなたは安全でないブロックを使用していて、それを使って面白いことをしています。

あなたの場合、Windows フォームに問題がある可能性があります。しかし、問題はそれが起こっていることではなく、正しく報告されていないことです。あなたはまだ何か間違ったことをしている可能性があります。

HWND を使用して、エラーの原因となっているコントロールを特定できますか? いつも同じですか?このコントロールは、アプリケーションがクラッシュする直前に何かおかしなことをしていますか? コントロールの管理されていない部分はカスタム ウィンドウですか、それとも標準コントロールですか?

于 2008-08-20T13:44:22.980 に答える
1

この種の問題は、dll などのアンマネージ コードを呼び出している場合に発生する可能性があります。マーシャリングがひどくうまくいかないときに発生する可能性があります。

アンマネージ コードを呼び出しているかどうか教えていただけますか? もしそうなら、デフォルトのマーシャリングまたはより具体的なものを使用していますか? スタック トレースの外観から、ポインターなどの安全でないコードを使用していませんか? これはあなたの問題かもしれません。

于 2008-08-20T13:30:30.657 に答える
0

より詳細なスタックトレースを次に示します。System.Windows.Form.dll と関係があるように見えます

TargetSite は{IntPtr DispatchMessageW(MSG ByRef)}
モジュールとしてリストされ、その下に System.windows.forms.dll があります

于 2008-08-20T13:46:56.497 に答える