Из 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);

Проверьте орфографию... это по памяти.

Другие вопросы по тегам