2009-03-18 7 views
4

Windowsフォームのアプリケーションで使用したいMFC/ATLプログラム用のコードが大量にあります。このコードを/ clrを有効にしてコンパイルし、基本クラスを見つけるためにこのコードを "変換"する最も簡単な方法は何ですか? CObject、CString、CFile、テンプレート?MFC/ATLコードをWindowsフォームAppに変換する

答えて

3

実行する必要のある「変換」はあまりありません。単に/ clrを有効にしてコンパイルするだけです。ビルドエラーが発生しますが、膨大な数はありません。

この決定はではなく、とする必要があります。/clrのしきい値を超えたら、いくつかのことを犠牲にします:

  • ビルドのパフォーマンスは、特にリンクが悪化します。 C++/clrプロジェクトをインクリメンタルにリンクすることはできません。

  • 追加の読み込みレイヤーが.Exeまたは.Dllに追加されます。特に静的な場合は、初期化の順序に注意する必要があります。これはVS2005の方がずっと良くなっていますが、まだまだ問題があります。私は正しくアンロードされない/ clr DLLプロジェクトを持っており、私はなぜそれを理解することができませんでした。このような問題の1つの症状は、デバッグからメモリリーク検出のdumponを終了しないということです。

  • プロジェクトに機能を追加すると、管理またはネイティブの実装を選択できます。プロジェクトの他の場所でネイティブ処理されたものを管理する場合は、選択する必要があります。古い実装を修正する必要がありますか?

  • 管理対象ネイティブのしきい値を超えると、パフォーマンスとデバッグの影響があります。

  • 例外処理が複雑になります。

プロジェクト全体で/ clrスイッチを反転するのではなく、よりターゲットを絞ったアプローチをお勧めします。あなたの大きな図書館をネイティブに保つ。混合モード/ clrブートストラップ/ラッパーを作成します。この「シンプロキシ」は、ネイティブライブラリの安定性とパフォーマンスを維持しながら、ネイティブライブラリへのアクセスの利点を提供します。

ネイティブライブラリのダイアログ(または悪いことにSDI/MDIビュー、hereを参照)がある場合は、ディスプレイを配線するのが難しい場合があります。しかしそれはそれに値するだろう。

+0

大規模なプロジェクトで/ clrフラグを混乱させてしまったので、私はdefします。ネイティブコードの大部分をDLLに分離することが進んでいくことに同意します。 – Nick

0

VC++。net、誤解していない場合は、新しいバージョンのMFCがあります。プロジェクトをVC.netプロジェクトに変換し、クラスをマネージコードにゆっくりと変換します。これは、すべてを書き直す巨大なジャンプではなく、ゆっくりとすべてを再設計する変更をもたらします。 Btw、MVCデザインパターンで内部動作からインタフェースを分離していない場合。

関連する問題