A few interfaces for you sir! -
These were semi-generated from the rust v-table documentation... I'll start working though them in the coming days.
Global Const $sIID_IMFAttributes = "(2cd2d921-c447-44a7-a13c-4adabfc247e3)"
Global Const $tag_IMFAttributes = _
"GetItem hresult(struct*; struct*);" & _
"GetItemType hresult(struct*; long*);" & _
"CompareItem hresult(struct*; struct*; bool*);" & _
"Compare hresult(ptr; long; bool*);" & _
"GetUINT32 hresult(struct*; uint*);" & _
"GetUINT64 hresult(struct*; uint64*);" & _
"GetDouble hresult(struct*; double*);" & _
"GetGUID hresult(struct*; struct*);" & _
"GetStringLength hresult(struct*; uint*);" & _
"GetString hresult(struct*; wstr; uint; uint*);" & _
"GetAllocatedString hresult(struct*; wstr*; uint*);" & _
"GetBlobSize hresult(struct*; uint*);" & _
"GetBlob hresult(struct*; struct*; uint; uint*);" & _
"GetAllocatedBlob hresult(struct*; ptr*; uint*);" & _
"GetUnknown hresult(struct*; struct*; ptr*);" & _
"SetItem hresult(struct*; struct*);" & _
"DeleteItem hresult(struct*);" & _
"DeleteAllItems hresult();" & _
"SetUINT32 hresult(struct*; uint);" & _
"SetUINT64 hresult(struct*; uint64);" & _
"SetDouble hresult(struct*; double);" & _
"SetGUID hresult(struct*; struct*);" & _
"SetString hresult(struct*; wstr);" & _
"SetBlob hresult(struct*; struct*; uint);" & _
"SetUnknown hresult(struct*; ptr);" & _
"LockStore hresult();" & _
"UnlockStore hresult();" & _
"GetCount hresult(uint*);" & _
"GetItemByIndex hresult(uint; struct*; struct*);" & _
"CopyAllItems hresult(ptr);"
Global Const $sIID_IMFMediaEventGenerator = "(2cd0bd52-bcd5-4b89-b62c-eadc0c031e7d)"
Global Const $tag_IMFMediaEventGenerator = _
"GetEvent hresult(long; ptr*);" & _
"BeginGetEvent hresult(ptr; ptr);" & _
"EndGetEvent hresult(ptr; ptr*);" & _
"QueueEvent hresult(uint; struct*; hresult; struct*);"
Global Const $sIID_IMFMediaSession = "{90377834-21D0-4dee-8214-BA2E3E6C1127}"
Global Const $tag_IMFMediaSession = $tag_IMFMediaEventGenerator & _
"SetTopology hresult(uint; ptr);" & _
"ClearTopologies hresult();" & _
"Start hresult(struct*; struct*);" & _
"Pause hresult();" & _
"Stop hresult();" & _
"Close hresult();" & _
"Shutdown hresult();" & _
"GetClock hresult(ptr*);" & _
"GetSessionCapabilities hresult(uint*);" & _
"GetFullTopology hresult(uint; uint64; ptr*);"
Global Const $sIID_IMFMediaSource = "{279a808d-aec7-40c8-9c6b-a6b492c78a66}"
Global Const $tag_IMFMediaSource = $tag_IMFMediaEventGenerator & _
"GetCharacteristics hresult(uint*);" & _
"CreatePresentationDescriptor hresult(ptr*);" & _
"Start hresult(ptr; struct*; struct*);" & _
"Stop hresult();" & _
"Pause hresult();" & _
"Shutdown hresult();"
Global Const $sIID_IMFSourceResolver = "{FBE5A32D-A497-4b61-BB85-97B1A848A6E3}"
Global Const $tag_IMFSourceResolver = _
"CreateObjectFromURL hresult(wstr; uint; ptr; long*; ptr*);" & _
"CreateObjectFromByteStream hresult(ptr; wstr; uint; ptr; long*; ptr*);" & _
"BeginCreateObjectFromURL hresult(wstr; uint; ptr; ptr*; ptr; ptr);" & _
"EndCreateObjectFromURL hresult(ptr; long*; ptr*);" & _
"BeginCreateObjectFromByteStream hresult(ptr; wstr; uint; ptr; ptr*; ptr; ptr);" & _
"EndCreateObjectFromByteStream hresult(ptr; long*; ptr*);" & _
"CancelObjectCreation hresult(ptr);"
Global Const $sIID_IMFPresentationDescriptor = "{03cb2711-24d7-4db6-a17f-f3a7a479a536}"
Global Const $tag_IMFPresentationDescriptor = _
$tag_IMFAttributes & _
"GetStreamDescriptorCount hresult(uint*);" & _
"GetStreamDescriptorByIndex hresult(uint; bool*; ptr*);" & _
"SelectStream hresult(uint);" & _
"DeselectStream hresult(uint);" & _
"Clone hresult(ptr*);"
And a couple funcs that I use to create and read guids.
Func __COM_CreateGUID($sGUID = "{00000000-0000-0000-0000-000000000000}", $pAddress = 0)
Local $tGUID = ($pAddress And IsPtr($pAddress)) ? DllStructCreate($tagGUID, $pAddress) : DllStructCreate($tagGUID)
Local $aGUID = StringSplit(StringRegExpReplace($sGUID, "[{}]", ""), "-", 2)
If UBound($aGUID) <> 5 Then Return SetError($ERROR_INVALID_PARAMETER, 0, False)
DllStructSetData($tGUID, 1, Dec($aGUID[0]))
DllStructSetData($tGUID, 2, Dec($aGUID[1]))
DllStructSetData($tGUID, 3, Dec($aGUID[2]))
DllStructSetData($tGUID, 4, Binary("0x" & $aGUID[3] & $aGUID[4]))
Return $tGUID
EndFunc ;==>__COM_CreateGUID
Func __COM_ReadGUIDAt($pGUID)
Local $tGUID, $sGUID
If (Not $pGUID) Or (Not IsPtr($pGUID)) Then Return SetError($ERROR_INVALID_PARAMETER, 0, "")
$tGUID = DllStructCreate($tagGUID, $pGUID)
$sGUID = StringFormat("{%s-%s-%s-%s-%s}", _
Hex(DllStructGetData($tGUID, 1), 8), _
Hex(DllStructGetData($tGUID, 2), 4), _
Hex(DllStructGetData($tGUID, 3), 4), _
StringMid(DllStructGetData($tGUID, 4), 3, 4), _
StringMid(DllStructGetData($tGUID, 4), 7, 12))
Return $sGUID
EndFunc ;==>__COM_ReadGUIDAt