1

COMオートメーションを介していくつかのクラスを公開するC++プロジェクトがあり、したがってIDLファイルがあります。

(UUID を変更せずに)のクラスに新しい関数を追加するたびに、クラスIDLを使用する他の C++ プロジェクト (新しい関数ではない) を新しいもので再構築する必要がありIDLます。クラッシュしないでください。

C++ プロジェクトを再構築する必要があるのに、VB プロジェクトは問題ないのはなぜですか?

4

1 に答える 1

5

おそらく、VB でオブジェクトを単にObjects として定義していると思われます。たとえば、次のようになります。

Dim YourObject as Object
Set YourObject = CreateObject("YourComponent.YourObject")

その場合、VB にオートメーション インターフェイス (IDispatch) を通過させることになります。基本的に、どのタイプに割り当てるかは実行時までわからないYourObjectため、IDispatch::Invoke を介してそのオブジェクトのメソッドを呼び出す必要があります。そのために、実行時にオブジェクト自体から呼び出しに必要なすべての情報を検索します。

対照的に、C++ コードはおそらく早期バインドされています。つまり、COM オブジェクトの vtable へのオフセットはコードに直接コンパイルされます。その場合、これらのオフセットが無効になるようにコードを変更すると、コードはひどく失敗します。

于 2014-04-11T01:58:12.613 に答える