moutend / go-wca

Pure golang bindings for Windows Core Audio API. The `cgo` is not required.
MIT License
111 stars 28 forks source link

IAudioMeterInformationVtbl struct order of uintptr is incorrect for GetChannelsPeakValues and GetMeteringChannelCount #18

Open MAVREE opened 9 months ago

MAVREE commented 9 months ago

What version of Go are you using (go version)?

go 1.21.1 amd64

What did you do?

This is the 0.3.0 VTable for the IAudioMeterInformation interface, I had failures in trying to get channel counts and corresponding peak values, when I realized the VTable had wrong orders for those two pointers (they're inverted).

I checked by making the syscall by myself and it works, I had E_POINTER errors on calling GetMeteringChannelCount and panic errors on calling GetChannelsPeakValues

type IAudioMeterInformationVtbl struct {
    ole.IUnknownVtbl
    GetPeakValue            uintptr
    GetChannelsPeakValues   uintptr
    GetMeteringChannelCount uintptr
    QueryHardwareSupport    uintptr
}

The working VTable:

type IAudioMeterInformationVtbl struct {
    ole.IUnknownVtbl
    GetPeakValue            uintptr
    GetMeteringChannelCount uintptr
    GetChannelsPeakValues   uintptr
    QueryHardwareSupport    uintptr
}

I've simply worked around it by making the syscall by myself, I don't know if it's simply because I'm using Windows 10 (?)