Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌入式firefox/xulrunner导致AccessViolationException异常_C#_Firefox_Access Violation_Xulrunner - Fatal编程技术网

C# 嵌入式firefox/xulrunner导致AccessViolationException异常

C# 嵌入式firefox/xulrunner导致AccessViolationException异常,c#,firefox,access-violation,xulrunner,C#,Firefox,Access Violation,Xulrunner,我已经在很大程度上成功地将firefox/xulrunner嵌入到我们的c#应用程序中,但它也并非没有问题。偶尔会抛出AccessViolationException,我认为这是由于GC在内存中移动托管对象,而非托管xpcom在移动对象后试图使用它引起的。例如,我为一个自定义协议创建了一个协议处理程序,该协议实现了firefox/xulrunner调用的一些接口。在这样做之后,AccessViolationException变得更加占主导地位。我研究了GCHandle.Alloc(object,

我已经在很大程度上成功地将firefox/xulrunner嵌入到我们的c#应用程序中,但它也并非没有问题。偶尔会抛出AccessViolationException,我认为这是由于GC在内存中移动托管对象,而非托管xpcom在移动对象后试图使用它引起的。例如,我为一个自定义协议创建了一个协议处理程序,该协议实现了firefox/xulrunner调用的一些接口。在这样做之后,AccessViolationException变得更加占主导地位。我研究了GCHandle.Alloc(object,GCHandleType.pinted)作为可能的解决方案,但找不到足够的信息来说明如何编写自定义封送拆收器以使实现接口的类成为“blittable”。那么,有没有人对如何处理这个问题或者如何将我的课程转化为“可飞行”课程有什么想法?此外,几乎不可能追踪互操作的哪些部分导致AccessViolationException。呃:-(


感谢您的帮助!

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


:-)

对于那些不熟悉“飞艇”一词的人