Из C#, как я могу вызвать Release для возвращенного объекта, который реализует IStorage?
Я читаю и пишу файлы структурированного хранилища из C#. Чтобы открыть файл я звоню
IStorage StorageInterface;
int result = StgOpenStorage(filename, null, STGM.READWRITE | STGM.SHARE_EXCLUSIVE, IntPtr.Zero, 0, out StorageInterface);
Это работает, и я могу получить доступ к файлу. Я считаю, что мне нужно вызвать Release() для объекта Storage, чтобы закрыть файл. Тем не менее, я не знаю, как добраться до Release, поскольку он реализован на IUnknown.
Могу ли я привести StorageInterface к объекту, который реализует IUnknown, и вызвать его таким образом?
Спасибо,
Джон
1 ответ
Решение
Это происходит от IUnknown. Каждый COM-объект является производным от IUnknown. Просто позвони
StorageInterface->Release();
Может быть, я был поспешным. Я пропустил часть C#... Вот как бы вы сделали это в C++.
В C# вы должны иметь возможность звонить, как это.
System.Runtime.InteropServices.Marshal.ReleaseComObject(StorageInterface);
Проверьте орфографию... это по памяти.