我有一个 Windows 运行时组件,其中我的所有类都需要在内部公开一个句柄:
private interface class IHandleContainer {
IntPtr GetHandle();
}
namespace Foo {
public ref class Bar: IHandleContainer { ... }
public ref class Baz: IHandleContainer {
internal:
virtual IntPtr GetHandle() = IHandleContainer::GetHandle;
}
}
我不需要 IHandleContainer 公开,但我确实需要 IHandleContainer 出现在接口列表中,这样我的每个内部对象都可以safe_cast<IHandleContainer>
成功。
在命名空间之外,IHandleContainer
不应将其发送到元数据,但应具有与之关联的 COM GUID,并通过将其列在 ref 类的接口列表中,CX 应该能够将正确的响应连接到 QueryInterface。从结构上讲,一切都应该“正常工作”。但是编译器不合作:
error C3991: 'Foo::Baz': cannot implement a non-public or nested interface 'IHandleContainer'