Windows runtime Can a C++/CX接口是否从IClosable继承? 如何声明一个运行时接口,它继承了C++中的代码> Windows .Frase.IcLosiabs/Cuff>?

Windows runtime Can a C++/CX接口是否从IClosable继承? 如何声明一个运行时接口,它继承了C++中的代码> Windows .Frase.IcLosiabs/Cuff>?,windows-runtime,c++-cx,Windows Runtime,C++ Cx,这两种尝试都会产生编译器错误: public interface class MyInterface : Windows::Foundation::IClosable { /* bla bla */ }; ==> error C2039: 'IClosable' : is not a member of 'Windows::Foundation' 及 然而,在Windows运行时,这种继承不能被绝对禁止,因为一些系统提供的接口确实继承自IClosable——例如,IIInputSt

这两种尝试都会产生编译器错误:

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

然而,在Windows运行时,这种继承不能被绝对禁止,因为一些系统提供的接口确实继承自
IClosable
——例如,
IIInputStream


<>我想我可以在IDL中定义<代码> MyFutue<代码>,然后在编译C++代码之前,将它转换为一个MIDLR.EXE的外部<代码> .WMMD < /Cube文件。不过,这对我的构建过程来说是一个不受欢迎的编译。是否有办法将其指定为C++/CX源?

只有在不使用C++/CX的情况下,才能从IClosable继承

出现第一个错误的原因是,此接口不是Windows.winmd元数据的一部分。此接口在Windows .Fun.h文件中声明:ABI::Windows:基金会命名空间。< /P> 出现第二个错误是因为接口不能有析构函数


MSDN:当您声明公共析构函数时,编译器将生成代码,以便ref类实现Platform::IDisposable,析构函数实现Dispose方法。Platform::IDisposable是Windows::Foundation::IClosable的C++/CX投影从不显式实现这些接口。

Windows::Foundation::IClosable
映射到
平台::IDisposable
。如果
ref类
具有公共析构函数,编译器将自动使该类实现此接口,并将
关闭
/
处置
成员映射到销毁。通过强制
MyInterface
的实现者也实现
IClosable
,您试图实现什么?@JamesMcNellis:有一个名称更改映射(到
System.IDisposable
)是为.NET编写的,但没有为C++/CX编写的。无论如何,编写
Platform::IDisposable
只会给我另一个编译器错误,告诉我声明析构函数——但正如第二个示例所示,这也不起作用。我试图实现的是向我的代码用户承诺,我将给他
MyInterface
上的
Close()
,这样他就可以使用之前存在的基于IClosable的基础设施来调用他可能已经拥有的功能。好吧,这不能用C++/CX实现。不幸的是,我尝试的解决方法似乎也不起作用:该界面当然是Windows.winmd的一部分。ildasm.exe生成的Windows.winmd转储中有一个声明。它可能在那里,但隐藏了。它不能被C++编译器发现。
public interface class MyInterface {
   /* bla bla */
   ~MyInterface();
};
==> error C2849: 'MyInterface' : an interface cannot have a destructor