VC++でCOMのインターフェイスとクラスの関係についてです。

IStream ← CStream(IStreamの実装)
 ↑          ↑
IFile(Open追加)← CFile(IFile::Openの実装)

class CStream : public IStream
interface IFile : public IStream
class CFile : public IFile, CStream

これだとIStreamの各関数が定義されていませんとエラーが出てしまいます。


IStream ← CStream(IStreamの実装)
      ♂
IFile(Open追加)← CFile(IFile::Openの実装)

class CStream : public IStream
interface IFile : public CStream
class CFile : public IFile

IFileの派生元をCStreamに、CFileの派生元をIFileにすれば
エラーは出ないのですが、何かしっくり来ません。


こういうモノなのでしょうか?