嵌入式firefox / xulrunner导致AccessViolationException

时间:2009-06-30 15:28:33

标签: c# firefox access-violation xulrunner

我在大多数情况下成功地将firefox / xulrunner嵌入到我们的c#应用程序中,但它并非没有麻烦。很快就会抛出一个AccessViolationException,我认为这是由于GC在内存中移动托管对象引起的,非托管xpcom尝试在移动后使用它。例如,我为自定义协议创建了一个协议处理程序,该协议实现了firefox / xulrunner调用的一些接口。在这之后,AccessViolationException变得更加占主导地位。我查看了GCHandle.Alloc(object,GCHandleType.Pinned)作为一种可能的解决方案,但是找不到关于如何编写自定义编组器以使我的类实现接口“blittable”的足够信息。那么有没有人对如何处理这个问题有任何想法,或者如何将我的课程翻译成一个“blittable”?此外,几乎不可能找到互操作的哪些部分导致AccessViolationException。呃: - (

感谢您的任何见解!

1 个答案:

答案 0 :(得分:2)

我相信我通过另一个问题"does GetComInterfaceForObject pin the object?"得到了答案。基本上我认为的是AccessViolationExceptions,它是由一个超出.net端范围的对象生成的,如果我的理解是正确的,那么非托管引用将不会使托管对象保持活动状态。因此,我创建的任何托管对象需要长时间存在,以便非托管代码可以调用它,现在存储在字段或列表中。同样在“blittable”对象的一侧,我还没有找到一种固定类的方法,但我确实设法弄清楚如何固定实现接口的结构。接口是一个互操作接口,它定义了MarshalAs属性,允许转换为非托管代码,因此显然允许固定对象。不确定这是否可以使用类实现,因为我仍然收到错误,即使它以与结构相同的方式实现。

: - )