我设法在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。
感谢您的帮助,
摩根
答案 0 :(得分:0)
我发现问题归功于Stackoveflow上的另一篇文章(Hosting CLR in Delphi with/without JCL - example请参阅重要说明)。
我不得不用Set8087CW($ 133F)初始化fpu然后奇怪的stackoverlow停止了!
我仍然有一个奇怪的行为:一切都很好,没有任何调试器,但如果我从VS2010运行应用程序,然后显示黑色wpf表单,阻止我与内容交互。 但是,如果我运行应用程序然后附加调试器,那么一切都很好!