Bonjour
VB.Net c'est du C# déguisé en VB.
Du coup, parfois, il faut chercher sa réponse en C#.
Je suis tombé notamment sur ce tuto
https://www.geekpedia.com/get-and-set-the-wave-sound-volume/
Il stipule qu'il faut importer System.Runtime.InteropService mais aussi que les paramètres des fonction sont de types Intptr et uint soit IntPtr et UInteger en VB.
Mais enfin que le second paramètre est un paramètre "out", en principe VB.net gère ça tout seul quand il s'agit de code .net, mais il semble conseillé de "forcer" ce out quand on importe du code natif.
En copiant collant le code exemple dans un traducteur en ligne, cela donne
Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Text Imports System.Windows.Forms Imports System.Runtime.InteropServices Namespace VolumeControl Public Partial Class Form1 Inherits Form <DllImport("winmm.dll")> Public Shared Function waveOutGetVolume(ByVal hwo As IntPtr, <Out> ByRef dwVolume As UInteger) As Integer <DllImport("winmm.dll")> Public Shared Function waveOutSetVolume(ByVal hwo As IntPtr, ByVal dwVolume As UInteger) As Integer Public Sub New() InitializeComponent() Dim CurrVol As UInteger = 0 waveOutGetVolume(IntPtr.Zero, CurrVol) Dim CalcVol As UShort = CUShort((CurrVol And &H0000fffF)) trackWave.Value = CalcVol / (UShort.MaxValue / 10) End Sub '.....la traduction du reste n'a pas bien marché End Class End Namespace
J'ai pas testé
Merci Whismeril.
Je n'avais pas précisé que effectivement j'importais
System.Runtime.InteropServices
En fait la doc Microsoft précise que l'on peut directement appeler la fonction avec de deviceID qui est 0 dans le cas du WaveOut des HPs, (j'ai vérifié cet ID grâce à waveOutGetNumDevs). Ce que je faisais.
Jai essayé avec inrprt qui n'est autre qu'un pointeur au début du handler du WaveOut, même erreur !
Je patine ...
Et le out Byref?
Bonjour
Le reste du code dont Whismeril dit que cela n'a pas bien marché devrait ressembler à ceci si cela peut aider .
Private Sub TrackWave_Scroll(sender As Object, e As EventArgs) Handles TrackWave.Scroll ' Calculate the volume that's being set Dim NewVolume As Integer = (UShort.MaxValue \ 10) * TrackWave.Value ' Set the same volume for both the left And the right channels Dim NewVolumeAllChannels As UInteger = CUInt((Convert.ToUInt32(NewVolume) And &HFFFF) Or (Convert.ToUInt32(NewVolume) << 16)) ' Set the volume WaveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels) End Sub