ILockBytes (Interfaces)
Last changed: Robert Chipperfield-212.44.26.236

.
Summary
TODO - a short description

C# Definition:

[ComVisible(false)]
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000000A-0000-0000-C000-000000000046")]
public interface ILockBytes
{
    void ReadAt(long ulOffset, System.IntPtr pv, int cb, out UIntPtr pcbRead);
    void WriteAt(long ulOffset, System.IntPtr pv, int cb, out UIntPtr pcbWritten);
    void Flush();
    void SetSize(long cb);
    void LockRegion(long libOffset, long cb, int dwLockType);
    void UnlockRegion(long libOffset, long cb, int dwLockType);
    void Stat(ref System.Runtime.InteropServices.STATSTG pstatstg, int grfStatFlag);

}

VB Definition:

<InterfaceType(ComInterfaceType.InterfaceIsIUnknown), _

Guid("0000000a-0000-0000-C000-000000000046")> _

Public Interface IlockBytes

    Function ReadAt(ByVal ulOffset As Long, ByVal pv As IntPtr, ByVal cv As Integer, <Out()> ByRef pcbRead As Long) As Integer
    Function WriteAt(ByVal ulOffset As Long, ByVal pv As IntPtr, ByVal cb As Integer) As UIntPtr
    Sub Flush()
    Sub SetSize(ByVal cb As Long)
    Sub LockRegion(ByVal libOffset As Long, ByVal cb As Long, ByVal dwLockType As Integer)
    Sub UnlockRegion(ByVal libOffset As Long, ByVal cb As Long, ByVal dwLockType As Integer)
    Sub Stat(ByRef pstatstg As STATSTG, ByVal grfStatFlag As Integer)

End Interface

User-Defined Types:

None.

Notes:

// read a chunk from the ILockBytes object
public int ReadAt(long offset, byte[] buffer, int bufferSize)
{
    IntPtr pv = Marshal.AllocHGlobal(bufferSize);
    UIntPtr pcbRead;

    ((ILockBytes)comPtr).ReadAt(offset, pv, bufferSize, out pcbRead);

    int length = (int)pcbRead.ToUInt32();
    Marshal.Copy(pv, buffer, 0, length);

    Marshal.FreeHGlobal(pv);
    return length;
}

Documentation