Как объявить интерфейс времени выполнения, который наследуется от Windows.Foundation.IClosable
в C++/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
Однако не может быть, чтобы такое наследование было категорически запрещено в среде выполнения Windows, потому что некоторые предоставляемые системой интерфейсы наследуются от IClosable
, например IInputStream
.
Я полагаю, что вместо этого я мог бы определить MyInterface
в IDL и преобразовать его во внешний файл .winmd
с помощью midlrt.exe перед компиляцией кода C++. Однако это было бы нежелательной компиляцией моего процесса сборки. Есть ли способ указать это как источник C++/CX?
Windows::Foundation::IClosable
сопоставляется сPlatform::IDisposable
. Еслиref class
имеет общедоступный деструктор, компилятор автоматически заставит этот класс реализовать этот интерфейс и сопоставит членClose
/Dispose
с уничтожением. Чего вы пытаетесь достичь, заставляя исполнителяMyInterface
также реализовыватьIClosable
? - person James McNellis   schedule 30.01.2013System.IDisposable
), задокументированное для .NET, но не для C++/CX. Во всяком случае, написаниеPlatform::IDisposable
вместо этого просто дает мне еще одну ошибку компилятора, говорящую мне вместо этого объявить деструктор - но, как показывает второй пример, это тоже не работает. Чего я пытаюсь добиться, так это пообещать пользователю моего кода, что он может вызыватьClose()
наMyInterface
, который я ему дам, чтобы он мог использовать любую уже существующую инфраструктуру на основе IClosable для ее вызова, которую он уже может есть в его распоряжении. - person hmakholm left over Monica   schedule 30.01.2013