IWMSBufferAllocator.AllocatePageSizeBuffer (Visual Basic .NET)

The AllocatePageSizeBuffer method initializes a page-aligned INSSBufferINSSBuffer Object (Visual Basic .NET).

IWMSBufferAllocator.AllocatePageSizeBuffer(  dwMaxBufferSize As UInt32,
  ByRef ppBuffer As INSSBuffer
)

Arguments

Uint32 containing the maximum size of the buffer in bytes. This must be less than 16 MB (16,777,216 bytes).

Reference to an INSSBuffer object containing the buffer.

Return Value

This method does not return a value.

If this method fails, it throws an exception.

Number

Description

0x80070057

dwMaxBufferSize is greater than 16 MB or ppBuffer is null.

0x8007000E

There is insufficient memory to complete the function.

Remarks

The AllocatePageSizeBuffer method allocates page-aligned memory. Because the method is not aware of the sector size of different storage systems, it allocates a buffer of the size passed in, if possible. Therefore, it is up to the caller to determine an appropriate buffer size.

Example

The following example uses the IWMSBufferAllocator object to allocate a buffer to hold the written playlist file.

Public Sub WritePlaylist( _
    ByVal pPlaylist As interop_msxml.IXMLDOMDocument, _
    ByVal pCallback As IWMSPlaylistParserCallback, _
    ByVal qwContext As System.UInt64) _
    Implements IWMSPlaylistParser.WritePlaylist

    Dim NodeList As IXMLDOMNodeList
    Dim pBufAlloc As IWMSBufferAllocator
    Dim pINSSBuffer As INSSBuffer
    Dim strPls As String
    Dim strMedia As String
    Dim pBuf As IntPtr
    Dim i As Integer
    Dim j As Integer
    Dim Enc As Encoder = Encoding.Unicode.GetEncoder()
    Dim Bytes As Byte()
    Dim iBytes As Integer

    Try
        strPls = "!- DJ_FILE v1.0 -!" & vbCrLf

        NodeList = pPlaylist.getElementsByTagName("media")
        For i = 0 To (NodeList.length - 1)
            For j = 0 To (NodeList(i).attributes.length - 1)
                If NodeList(i).attributes(j).nodeName = "src" Then
                    strMedia = NodeList(i).attributes(j).nodeValue
                Else
                    strPls = strPls & "# " & _
                      NodeList(i).attributes(j).nodeName & "=" & _
                      Chr(34) & NodeList(i).attributes(j).nodeValue & _
                      Chr(34) & vbCrLf
                End If
            Next
            If Not strMedia = vbNullString Then
                strPls = strPls & strMedia & vbCrLf
            End If
        Next

        iBytes = Enc.GetByteCount(strPls.ToCharArray(), 0, strPls.Length, False)
        Bytes = Array.CreateInstance(GetType(Byte), iBytes)
        iBytes = Enc.GetBytes(strPls.ToCharArray(), 0, strPls.Length, _
                              Bytes, 0, True)

        pBufAlloc = m_ClassFactory
        pBufAlloc.AllocatePageSizeBuffer(Convert.ToUInt32(iBytes), _
                                         pINSSBuffer)
        pINSSBuffer.SetLength(Convert.ToUInt32(iBytes))
        pINSSBuffer.GetBuffer(pBuf)

        Marshal.Copy(Bytes, 0, pBuf, iBytes)

        pCallback.OnWritePlaylist(S_OK, pINSSBuffer, qwContext)
    Catch e As Exception
        pCallback.OnWritePlaylist(E_FAIL, pINSSBuffer, qwContext)
    End Try
End Sub

Requirements

Reference: Add a reference to Microsoft.WindowsMediaServices.

Namespace: Microsoft.WindowsMediaServices.Interop.

Assembly: Microsoft.WindowsMediaServices.dll.

Library: WMSServerTypeLib.dll.

Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.

See Also

Concepts

IWMSBufferAllocator Object (C#)