John Mott
John Mott

Reputation: 119

From C#, how do I call Release on a returned object that implements IStorage?

I'm reading and writing Structured Storage files from C#. To open the file i call

IStorage StorageInterface;

int result = StgOpenStorage(filename, null, STGM.READWRITE | STGM.SHARE_EXCLUSIVE, IntPtr.Zero, 0, out StorageInterface);

This works and I can access the file. I believe I need to call Release() on the Storage object to close the file. However, I don't know how to get to Release since its implemented on IUnknown.

Can I cast StorageInterface to an object that implements IUnknown and call it that way?

thanks,

john

Upvotes: 0

Views: 266

Answers (1)

Joseph Willcoxson
Joseph Willcoxson

Reputation: 6040

It is derived from IUnknown. Every COM object is derived from IUnknown. Just call

 StorageInterface->Release();

Maybe I was hasty. I missed the C# part... That's how you'd do it in C++.

In C#, you should be able to call like this.

System.Runtime.InteropServices.Marshal.ReleaseComObject(StorageInterface);

Check the spelling...it's from memory.

Upvotes: 4

Related Questions