AcSmResources.GetEnumerator MethodВ .NET под освобождением я бы понимал вызов IDisposable.Dispose(), в случае его реализации, или же присвоение null в качестве значения. В обозначенном выше фрагменте документации, как я понимаю, под "освобождением" понимается обычное присвоение null (уточняю на всякий случай)? Или же я должен вызвать какую-то функцию, присутствующую в одном из базовых интерфейсов COM? Если второй вариант, то что это за функция?
Returns an enumerator of the contained IAcSmFileReference components in the collection.
The caller must release the interface when the operation is complete.
SyntaxКод: [Выделить]GetEnumerator() As IAcSmEnumFileReference
Или же я должен вызвать какую-то функцию, присутствующую в одном из базовых интерфейсов COM? Если второй вариант, то что это за функция?Не проверял, но должен быть метод Release, который и имеется в виду.
Не проверял, но должен быть метод Release, который и имеется в виду.Этот метод я искал в первую очередь :)
Дополнительный вопрос: поскольку не реализован IUnknown, то каким образом освобождает указанные выше ресурсы стандартный Sheet Set Manager, по умолчанию присутствующий в AutoCAD?Интерфейс IUnknown фактически используется для подсчета ссылок на COM-объект: метод AddRef добавляет единицу к счетчику ссылок, а метод Release уменьшает этот счетчик на единицу. Т.е. освобождение ресурса происходит не здесь.
Судя по тем примерам, которые имеются (пример) - это баг в документации и ничего освобождать не нужно.Хотелось бы знать точно. :)
Хорошо. Задам вопрос в ADN DevHelp.Спасибо!
Если в двух словах, то это требование касалось чистого COM.Любопытно... А как это требование следовало бы выполнять, учитывая отсутстствие обозначенных мною выше интерфейсов, если бы я писал плагин, к примеру, на VBA, или на native C++?
interface IAcSmEnumFileReference : IUnknown {
[helpstring("Iterates to and returns the next element."), helpcontext(0x00000001)]
HRESULT _stdcall Next([out, retval] IAcSmFileReference** ppRef);
[helpstring("Resets the enumerator before the first element."), helpcontext(0x00000001)]
HRESULT _stdcall Reset();
};
Смотри idl-файлы в аттаче. Т.е. как минимум с AutoCAD 2004 по AutoCAD 2014 интерфейс IUnknown в указанных тобой интерфейсах реализован.
Кто сказал, что IUnknown не реализован в указанных тобой интерфейсах? Например, IAcSmEnumFileReferenceЯ вот что вижу в MS VS для IAcSmEnumFileReference:
[InterfaceType(1)]
в твоём коде. Класс InterfaceTypeAttribute (http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.interfacetypeattribute%28v=vs.110%29.aspx) как раз и используется для указания того, какой COM-интерфейс наследуется. И InterfaceIsIUnknown как раз и равен 1, т.е. можно читать как:[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]