1

Windows.Foundation.IClosableC ++ / CXで継承するランタイムインターフェイスをどのように宣言しますか?

これらの試みは両方ともコンパイラエラーを生成します:

public interface class MyInterface : Windows::Foundation::IClosable {
   /* bla bla */
};
==> error C2039: 'IClosable' : is not a member of 'Windows::Foundation'

public interface class MyInterface {
   /* bla bla */
   ~MyInterface();
};
==> error C2849: 'MyInterface' : an interface cannot have a destructor

IClosableただし、システムが提供する一部のインターフェイスは-から継承するため、Windowsランタイムでそのような継承が断固として禁止されているわけではありませんIInputStream

代わりにIDLで定義し、C++コードをコンパイルする前にmidlrt.exeを使用MyInterfaceして外部ファイルに変換できると思います。.winmdしかし、それは私のビルドプロセスの望ましくないコンパイルになります。これをC++/ CXソースとして指定する方法はありますか?

4

1 に答える 1

2

IClosableから継承できるのは、C ++/CXを使用しない場合のみです。

最初のエラーが発生する理由は、このインターフェイスがWindows.winmdメタデータの一部ではないためです。このインターフェイスは、windows.foundation.hファイルABI :: Windows::Foundation名前空間で宣言されています。

2番目のエラーは、インターフェイスにデストラクタを設定できないために表示されます。

MSDN:パブリックデストラクタを宣言すると、コンパイラはコードを生成して、refクラスがPlatform :: IDisposableを実装し、デストラクタがDisposeメソッドを実装するようにします。Platform :: IDisposableは、Windows :: Foundation::IClosableのC++/CXプロジェクションです。これらのインターフェイスを明示的に実装しないでください。

于 2013-01-30T07:23:04.753 に答える