0

Delphi コントロール内で WPF コントロールを作成およびホストできる Delphi win32 アプリケーションで CLR 2.0 をホストすることができました。これは、WinForms アプリケーションの ElementHost に似ています。

ここで、ソリューションを CLR 4.0 に移行したいと考えています。関連付けられた Xaml リソースを持つ UserControl を作成しようとする場合を除いて、すべて正常に動作します。その場合、スタック オーバーフロー エラーが発生し、プロセスが強制的に終了されます。しかし、(xaml を読み取らずに) コードで WPF コントロールを作成すると、すべて正常に動作します。

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 を使用することに注意してください。

ご協力いただきありがとうございます、

モーガン

4

1 に答える 1

0

Stackoveflowに関する別の投稿のおかげで問題が見つかりました(JCLの有無にかかわらずDelphiでCLRをホストする-例は重要な注意を参照してください)。

Set8087CW($ 133F)でfpuを初期化する必要がありましたが、その後、奇妙なスタックオーバーフローが停止しました!

ただし、まだ奇妙な動作があります。デバッガーがなくてもすべて問題ありませんが、VS2010からアプリを実行すると、黒いwpfフォームが表示され、コンテンツを操作できなくなります。ただし、アプリを実行してからデバッガーに接続すると、すべて問題ありません。

于 2010-07-20T03:06:57.267 に答える