1

多数のクラスを提供する COM dll を利用する C++/CLI アプリケーションを作成しています。それらのほとんどは、いくつかのインターフェースを実装しています。さまざまなインターフェイスのそれぞれのメソッドにどのようにアクセスできるのか疑問に思っていました。たとえば、タイプ ライブラリを見ると、クラスの 1 つが次のように定義されています。

coclass FWFile {
    [default] interface IFWFile;
    interface _IFWFileInternal;
    [default, source] interface _FWFileEvents;
    interface CStatistics;
    interface IFWFile2;
    interface IFWFile3;
    interface IFWFile4;
};

このタイプのオブジェクトを作成すると、IFWFile インターフェイスが実装されているように見えます。ただし、IFWFile2 のメソッドを利用したいと考えています。タイプ IFWFile2 のオブジェクトを作成してキャストすることはできますか?

IFWFile2 file2 = (IFWFile2)file1;
4

1 に答える 1

0

使用する場合CoCreateInstance()、新しく作成されたオブジェクトから取得するインターフェイスを指定できます。複数のインターフェイスが必要な場合は、呼び出し時に 1 つを取得し、他のインターフェイスを取得するためにCoCreateInstance()使用します。インターフェイスの取得が成功するたびQueryInterface()に呼び出すことを忘れないでください。Release()

C スタイルのキャスト COM ポインターは使用しないでください。インターフェイスがタイプ ライブラリ指定された順序であるとは限りません。また、実際のクラスにインターフェイスが実際に実装されているとは限りません。QueryInterface()COM オブジェクトからインターフェイス ポインターを取得するために常に使用します。

于 2012-07-11T08:18:06.323 に答える