1

こんにちは、.net言語または他の言語(たとえば古いvbですが、これはそれほど重要ではありません)に公開する必要があるc ++プロジェクト(ライブラリ)があります。2つのオプションは、プロジェクトのCOMラッパーの記述またはマネージC++ラッパーです。どれを選ぶ?

たとえば、manged c ++を使用することの大きな利点の1つは、COMのコレクションが非常に複雑になるのではなく、.netコレクションクラスを使用してパラメーターとして渡すことです。

4

2 に答える 2

1

「COMラッパー」という用語はあまり意味がありません。COMクラスを作成する場合は、最初にバニラC ++クラスを作成してから、それをラップして模倣するCOMクラスを作成する必要がある理由はありません。これは、マネージC ++に対するCOMの利点の1つです。マネージC++では、バニラC ++クラス(マネージクライアントがない場合を除く)とマネージラッパークラス(マネージクライアント用)を作成する必要があります。

私の意見では、相互運用にCOMまたはマネージC++をいつ使用するかを決定する要素は簡単です。

クライアントが任意の言語で使用できる完全に新しいアンマネージクラス(ラッパーではない)を作成する場合は、COMを使用します。

多くのマネージコードとアンマネージコードを混在させる完全に新しいクラス(ラッパーではない)を作成する場合は、マネージC++を使用します。

ご覧のとおり、「ラッパー」という言葉はデザインのどこにも登場しないはずです。ラッパーは吸う:)

于 2012-09-23T07:20:46.847 に答える
0

COMコレクションが非常に複雑な場合は、COMコレクション管理へのアプローチ方法を再考することをお勧めします。そこにはまったく異なる問題がありますが、それは言われています...

古いVBがあまり重要ではないというあなたの言及は、あなたが思っているよりもあなたの答えにとってより重要です。古いVBは.NETを話しませんが、COMを非常によく話します。あなたがその道に行かなければならないことを予見するならば、それはCOM側への大きな推進力です。

私はマネージC++のファンではありません。それは、これまでに出会う可能性のある言語の中で最も移植性が低く、管理が難しく、読みにくい方言であるためです。ただし、ライブラリのコアコードが十分に単純な場合は、妥当な労力でマネージC++で実行できる可能性があります。ライブラリが動的であるほど、.NET管理への移植が難しくなります。でも...

そこに到達すると、COMラッパーは、移植を行う際に賢明な選択を行い、途中で簡単にラップできるようにしておけば、あまり問題なくレガシーVBのようなCOMクライアントに戻ることができます。

これは、(非常に苦痛を伴う)マネージC ++が最善の選択肢であると私が言える最も回りくどい方法ですが、そのガントレットを捨てる前に、真剣に検討します。

于 2012-09-23T07:02:00.757 に答える