【发布时间】:2016-03-12 01:35:11
【问题描述】:
我在这里看到过类似的错误,但无法确定是什么原因造成的。
我有一个 IntPtr 引用 GetForegroundWindow() 对象:
IntPtr ptr = GetForegroundWindow();
GetForegroundWindow() 方法就是这样:
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
这又用于建立GetExecutablePath()方法:
string name = GetExecutablePath(ptr);
在这段时间之后,我打电话给臭名昭著的Marshal.Release()
Marshal.Release(ptr);
此时我收到以下错误:
检测到托管调试助手“ReportAvOnComRelease”
更多信息包括:
附加信息:在通过 Marshal.Release、Marshal.ReleaseComObject 或在相应的 RuntimeCallableWrapper 被垃圾回收后隐式释放 COM 接口指针时捕获但处理了异常。这是用户引用计数错误或 COM 对象的 Release 存在其他问题的结果。确保正确管理引用计数。虽然 CLR 会捕获这些类型的异常,但它们仍可能导致损坏和数据丢失,因此应尽可能解决导致异常的问题
对我来说,这表明内存泄漏或指针损坏的可能性非常高。
从极其简单直接的用例中可以看出,我似乎无法确定原因。
关于如何调试和/解决此问题的任何建议?
【问题讨论】:
标签: c# com marshalling