2009-04-02 10 views
2

現在、複雑なダイアログを表示するためにCOMオブジェクトを呼び出すいくつかの大きなMFCアプリケーションがあります。ダイアログをアプリケーションに統合したいので、COMオブジェクトを使い続けることは望ましくありません。MFCアプリケーションから.NETフォームを呼び出すにはどうすればよいですか?

私は別のプロジェクト(WPFではなくWindowsフォームを使用)として.NETでダイアログを構築し、それを呼び出し、通常のC++コードから呼び出すことができる2番目のC++/CLIプロジェクトを提供する可能性を検討しています。この構造は、ダイアログを組み込む必要のあるいくつかのアプリケーションが、ソリューション内のプロジェクトを選択できるようにするためのものです。 (アプリケーションは従来のアプリケーションであり、広範囲に書き直すことはできません。徐々に.NETに移行していますが、これは複数年のプロジェクトです)。

私はこれをモデルアプリケーションからテストしましたが、これまでのところ大規模なアプリケーションの中で最も単純なものでは動作しませんでした。私が読んだことに基づいて、それが可能であることを疑う。 (this linkを参照してください、特に私はthis Stackoverflow questionを認識していますが、関連性が低いと思われます)

So.これも可能ですか?どのように進むべきかについての提案はありますか?

答えて

0

。 Boostライブラリのスレッディングがデフォルト状態のC++/CLIと互換性がないという2つの問題がありました。 1つの解決策は、別のフラグセットでコンパイルし、静的にリンクすることです。もう1つは、ダイナミックにリンクされたDLLとして使用することです。

解決方法の2番目の部分は、OLE初期化が失敗した場合に役立たないメッセージで失敗するため、STAへのリンクプロパティでCLRスレッドを設定することです。

1

.NETコンポーネントを呼び出すためのC++/CLIプロジェクトの作成に成功しましたか?私はそれが通過していない2つの層の間を絞り込むことを試みるでしょう。

C++コードはCOMコンポーネントを呼び出すことができるため、COMサポートで.NET DLLをコンパイルするだけで済みます。私はC++でCOMをやったことはありませんでしたが、私はあなたにその詳細を伝えることはできません。しかし、私は多くのCOM公開された.NET DLLを作ったし、その側面はかなり簡単です。通常は、プロジェクトプロパティのカップルチェックボックス(アセンブリタブの高度なボタンの下にあると思います)。

+0

既にC++ベースのCOMコンポーネントがあります。このプロジェクトのポイントは、COMの必要性を排除することです。 – mlo

+0

実行が問題のコードの近くに来る前に、OLEの初期化に失敗します。そのエラーを見つけて私を最初のリンクに導いた。 – mlo

0

なぜ仲介業者が必要ですか?なぜだけではなく、

Native C++ app --> C++/CLI class library 

C++/CLIライブラリはCWinFormsViewまたはCWinFormsDialog周りのネイティブのラッパーを提供します。

なぜ、COMを削除する必要がありますか?それは十分に速く、いったんインターフェイスを実装するのがうまくいけば、セレモニーはそれほど悪くはありません。

+0

既存のCOMオブジェクトには、.NETに移植したくないC++コードがたくさんあります。私が使用している構造は、古いC++コードであるコードの大部分から呼び出される別々のC#プロジェクトとして2つの複雑なダイアログを持っています。それはちょうど今のメインアプリから呼ばれています。 – mlo

+0

それでは、質問が何であるか混乱しています。あなたはこれを稼働させているかしていませんか? –

2

は、Windowsは、ユーザーコントロールのコントロールをフォームカプセル化し、DDX_ManagedControl使用してMFCアプリケーションでそれらを埋め込む:私は最終的に非常に優れたMicrosoftのサポート専門家の助けを借りて、この問題を解決し

http://msdn.microsoft.com/en-us/magazine/cc163605.aspx

関連する問題