1

私は、MFC を使用して主に C++ で書かれたかなり大規模なプロジェクトに取り組んでいます。このアプリケーションを Qt を使用するように徐々に移植する必要があります。何年も前に、多くの機能のラッパーが COM を使用して作成されました。新しい Qt コードの COM ラッパーを使用すると、MFC への依存を強制するコードを分離するのに役立つと思います。残念ながら、COM/ActiveX の使用を制限するよう求められています。そのため、Qt で COM ラッパーの新しいコンシューマーを導入することは理想的ではありません。Visual Studio には、TLB ファイルのインターフェイスに基づいて C++ クラスを生成するクラス ウィザードがありますが、これは MFC に依存しており、インターフェイスは依然として COM ( 、 など) を公開していLPDISPATCHますSAFEARRAY*

とはいえ、Microsoft IDL ファイルを取得して C++ に変換するツール (無料または商用) を知っている人はいますか? MFC にも COM にも依存しないインターフェイスはありますか?

4

2 に答える 2

1

midl.exe によって生成されたコードの操作

それがハングアップナンバーワンです。Midl.exe はコードを生成せ、宣言のみを生成します。C++ の純粋仮想クラス、実装のないメソッド宣言のみ。.h ファイルまたは .tlb タイプ ライブラリ ファイル。タイプ ライブラリはツールで読みやすく、オートメーションと呼ばれる COM の制限付きサブセットを備えているため便利です。Windows 上のほぼすべての言語ランタイムによって実装されます。

重要な点は、これらは単なる宣言であり、さまざまなモジュールやさまざまな言語またはクラス ライブラリで記述されたコードを連携させる接着剤であるということです。 大規模なプロジェクトで非常に重要なのは、インターフェイスがピースを結び付けることです。

私たちのシステム アーキテクトは、私たちのアプローチを知り、これらの COM 仕様を新しい Qt プロジェクトに追加しない方法を見つけることを勧めました。

それは非常に役に立たないアドバイスです。「そんなことはしないでください」とは、腕を後ろに回すのが痛いときに医師が私に言うことです. 私はそれで暮らすことができます、私には良い代替手段があり、ただ好転することができます。あなたの場合、私は建築家にもっと要求しなければなりません。彼は胴体を脚と頭と足と手から切り離しています。脳は完全にばらばらです。今持っているコードのさまざまなチャンクを連携させるまさに接着剤です。そのインターフェイスを壊せば、Netscape スタイルのアプリを深刻に壊すことになります。

宇宙飛行士のアーキテクト (もう 1 人のスポルスキーのお気に入り) に気をつけてください。インターフェイスを壊すとアプリに深いアーキテクチャ上の影響があるため、合理的な代替手段であるアーキテクチャアプローチを要求します。誰もがインターフェイスから実装したMFC クラスは、インターフェイスを変更するとほとんどがらくたになります。それらをすべて Q クラスに書き直すと、しばらくの間、生産性が大幅に低下します。そして、書くのは壊滅的に退屈なコードです。同じものを作成するためだけに、バグが増えます。やってはいけないことその2。

于 2012-06-02T21:21:25.070 に答える
0

Visual C++ を使い続けることができる場合、解決策は COM のプレーン コンパイラ サポートを使用することです。

TLB ファイルを #import する必要があります

http://msdn.microsoft.com/en-us/library/8etzzkb6%28v=vs.100%29.aspx

次に、COM コンパイラ サポートを利用して、COM オブジェクト インスタンスを処理できます。

http://msdn.microsoft.com/en-us/library/h31ekh7e.aspx

于 2012-06-02T19:57:49.660 に答える