次の非常に単純なインターフェイスがあります。
[uuid(0d585932-fbc4-4b0a-90b5-ccf34aefd4c6)]
[version(COMPONENT_VERSION)]
interface IPerson : IInspectable
{
[propget] HRESULT Name([out, retval] HSTRING* value);
[propput] HRESULT Name([in] HSTRING value);
[propget] HRESULT Surname([out, retval] HSTRING* value);
[propput] HRESULT Surname([in] HSTRING value);
}
[uuid(863571FC-4CBB-47E8-8BD3-2709D5CB7D0D)]
[version(COMPONENT_VERSION)]
interface ICitizen : IPerson
{
[propget] HRESULT Address([out, retval] IAddress** value);
[propput] HRESULT Address([in] IAddress* value);
}
この MIDL を WinRT 用にコンパイルしようとすると、次のエラーが発生します。
エラーMIDL5004 : インターフェイスは IInspectable から継承する必要があります: ICitizen
WinRT の下で COM がどうなったのか、私は本当に困惑しています。インターフェイスを別のインターフェイスから継承するような単純なことがもはや不可能な場合、どうすればそれを使用してアプリケーションを設計できますか?
WinRT の MIDL のドキュメントを検索しましたが、見つかりませんでした!! Google でエラー MIDL5004 を検索しても、結果が表示されません。
Microsoft の誰かが、IInspectable から継承する別のインターフェイスを継承するインターフェイスを作成する方法を説明できますか。別のテストでは、C++/CX で同じインターフェイスを作成し、IPerson から継承する ICitizen インターフェイスを作成できました。WinRT の MIDL でこれが許可されなくなった理由は、これが COM アーキテクチャの基盤であり、インターフェイスの階層を作成するためです。
ご意見ありがとうございます O. Rouit