Die Bedeutung welcher Zahlen ist dir jetzt noch unklar?
Die Konstanten des Rückgabewertes der waveOutGetDevCaps-Funktion oder die Array-Elemente des Rückgabewertes der DLLCall-Funktion?
Also gut - versuchen wir einfach beides zu klären.
Der Rückgabewert der waveOutGetDevCaps-Funktion kann laut >>Funktionsbeschreibung<< nur die Werte MMSYSERR_NOERROR, MMSYSERR_BADDEVICEID, MMSYSERR_NODRIVER und MMSYSERR_NOMEM annehmen.
Das entspricht quasi lediglich nur einer Information darüber ob die Funktion erfolgreich durchgeführt wurde oder nicht.
Nach kurzem Blick in den API-Viewer erfahren wir das diese Konstantenwerte den Integerwerten 0, 2, 6 und 7 entsprechen.
Um es vielleicht noch ein bisschen deutlicher zu machen hab ich deine Funktion mal bisschen angepasst:
Spoiler anzeigen
Func _waveOutGetDevCaps($struct, $id = 0, $dll = "winmm.dll")
Local Const $MMSYSERR_NOERROR = 0x0
Local Const $MMSYSERR_BASE = 0x0
Local Const $MMSYSERR_BADDEVICEID = $MMSYSERR_BASE + 2
Local Const $MMSYSERR_NODRIVER = $MMSYSERR_BASE + 6
Local Const $MMSYSERR_NOMEM = $MMSYSERR_BASE +7
Local $ReturnValue = ''
Local $ret, $out = "kein Array"
$ret = DllCall($dll, _
"int", "waveOutGetDevCapsA", _
"uint", $id, _
"ptr", DllStructGetPtr($struct), _
"uint", DllStructGetSize($struct) _
)
$out = "kein Array"
If IsArray($ret) Then
$out = "" & @CRLF
For $i = 0 To UBound($ret) - 1
$out &=$i & ". Arrayelement: " & $ret[$i] & @CRLF
Next
EndIf
If BitAND($ret[0], $MMSYSERR_NOERROR) = $MMSYSERR_NOERROR Then $ReturnValue &= 'MMSYSERR_NOERROR '
If BitAND($ret[0], $MMSYSERR_BADDEVICEID) = $MMSYSERR_BADDEVICEID Then $ReturnValue &= 'MMSYSERR_BADDEVICEID '
If BitAND($ret[0], $MMSYSERR_NODRIVER) = $MMSYSERR_NODRIVER Then $ReturnValue &= 'MMSYSERR_NODRIVER '
If BitAND($ret[0], $MMSYSERR_NOMEM) = $MMSYSERR_NOMEM Then $ReturnValue &= 'MMSYSERR_NOMEM'
MsgBox(0, "", _
"wMid: " & DllStructGetData($struct, "wMid") & @CRLF _
& "wPid: " & DllStructGetData($struct, "wPid") & @CRLF _
& "vDriverVersion: " & DllStructGetData($struct, "vDriverVersion") & @CRLF _
& "szPname: " & DllStructGetData($struct, "szPname") & @CRLF _
& "dwFormats: " & DllStructGetData($struct, "dwFormats") & @CRLF _
& "wChannels: " & DllStructGetData($struct, "wChannels") & @CRLF _
& "dwSupport: " & DllStructGetData($struct, "dwSupport") & @CRLF _
& "@ERROR: " & @error & @CRLF _ ;Was soll das?
& "Rückgabewert der dll: " & $ReturnValue & @CRLF _
& "Array der Rückgabewerte der dll:" & $out _
)
EndFunc
Nun zu den DLLCall-Rückgabewerten:
DLLCall gibt ein Array zurück - im ersten Arrayelement steht der Rückgabewert der aufgerufenen DLL-Funktion in den darauf folgenden Elementen stehen die Werte die der DLLCall-Funktion als Parameter übergeben wurden.
In deinem Fall hier also:
Array[0] = Rückgabewert der waveOutGetDevCapsA-Funktion
Array[1] = Wert der der Parameter uDeviceID beim Aufruf erhalten hat.
Array[2] = Wert der der Parameter pwoc beim Aufruf erhalten hat.
Array[3] = Wert der der Parameter cbwoc beim Aufruf erhalten hat.