由于stackoverflow错误,无法在Clr 4.0自托管应用程序中创建WPF UserControl

时间:2010-07-16 03:58:56

标签: wpf winapi c#-4.0 clr-hosting

我设法在Delphi win32应用程序中托管CLR 2.0,该应用程序能够在Delphi控件中创建和托管WPF控件,类似于ElementHost for WinForms应用程序。

现在,我想将我的解决方案移至CLR 4.0,除非我尝试创建具有关联Xaml资源的UserControl,否则一切正常。在这种情况下,它会导致stackoverflow错误,迫使进程退出!但是,如果我通过代码创建一些WPF控件(不读取xaml),那么一切正常!

我设法介入框架代码,直到我输入 XamlReader.LoadBaml 方法,该方法在执行以下代码后崩溃:

            // We don't actually use the GeneratedInternalTypeHelper any more.
            // But for v3 compat, don't allow loading of internals in PT unless there is one.
            Type internalTypeHelper = null;
            if (streamInfo.Assembly != null) 
            {
                try 
                { 
                    internalTypeHelper = XamlTypeMapper.GetInternalTypeHelperTypeFromAssembly(parserContext);
                } 
                // This can perform attribute reflection which will fail if the assembly has unresolvable
                // attributes. If that happens, just assume there is no helper.
                catch (Exception e)
                { 
                    if (MS.Internal.CriticalExceptions.IsCriticalException(e))
                    { 
                        throw; 
                    }
                } 
            }

请注意,加载的程序集也使用CLR4。

感谢您的帮助,

摩根

1 个答案:

答案 0 :(得分:0)

我发现问题归功于Stackoveflow上的另一篇文章(Hosting CLR in Delphi with/without JCL - example请参阅重要说明)。

我不得不用Set8087CW($ 133F)初始化fpu然后奇怪的stackoverlow停止了!

我仍然有一个奇怪的行为:一切都很好,没有任何调试器,但如果我从VS2010运行应用程序,然后显示黑色wpf表单,阻止我与内容交互。 但是,如果我运行应用程序然后附加调试器,那么一切都很好!