Seite 2 von 2
Verfasst: 07.01.2008 19:25
von Fluid Byte
KinkMike hat geschrieben:Mhh, geht irgentwie immer noch nicht wirklich

Ich liebe solche detaillierten Fehlerbeschreibungen...
KinkMike hat geschrieben:Gibts da nicht was einfacheres ? Vielleicht nen Code, der ca. 1-10 Zeilen hat ?
Glaubst wir posten den Kram hier zum Spaß?

Verfasst: 08.01.2008 13:35
von KinkMike
Die Fehlerbeschreibung:
=> This Structure is already declared
genauso bei
Garbage to the end of the line
ebenso bei
In Zeile 31 : Structure not found : MIXERLINE
this value dont have a structure
Code: Alles auswählen
mxl\cbStruct = SizeOf(mxl)
mxl\dwComponentType = componentType
Naja und ich denke eigentlich nicht dass ihr das hier nur um Spaß postet! Könnte ja trotzdem sein, dass es da was einfacheres gibt, ich kenn mich damit nicht so gut aus^^.
Aber trotzdem Danke für dein Bemühen
Verfasst: 08.01.2008 14:25
von Kiffi
KinkMike hat geschrieben:Gibts da nicht was einfacheres ?
Grüße ... Kiffi
Verfasst: 08.01.2008 15:07
von KinkMike
Ahh ok, thx Kiffi, so gehts auch
is zwar vllt etwas umständlich, aber ich glaubt ich mach das so

Verfasst: 09.01.2008 12:40
von Shardik
KinkMike,
vielen Dank für die detaillierteren Fehlermeldungen. Da ich PB 3.3 nicht besitze, kann ich nur an Hand der Fehlermeldungen vermuten, was in PB 3.3 an Strukturen noch nicht vordefiniert ist oder welche Anweisungen erst in späteren Versionen hinzugekommen sind.
Daher noch einmal ein neuer Versuch:
Ich habe das Beispiel von KarLKoX aus dem oben zitierten Link einmal modifiziert und versucht an PB 3.3 anzupassen, indem ich alle SizeOf()-Anweisungen (die in PB 3.3 offensichtlich noch nicht existierten) gegen die tatsächliche Strukturgröße ausgetauscht und alle Definitionen von Strings fester Länge, z.B. szName{}, gegen ein Byte-Array der gleichen Länge ersetzt habe. Außerdem habe ich die in PB 3.3 offensichtlich noch nicht definierten Strukturen MIXERLINE und MIXERLINE_TARGET definiert. Für die Benutzung unter PB 4 können die Zeilen 1-35 gelöscht weren. Dann ist der Code-Umfang auch nicht mehr so groß...
Code: Alles auswählen
#MIXERCONTROL_CONTROLTYPE_VOLUME = 1342373889
#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = 4101
#MIXER_GETLINECONTROLSF_ONEBYTYPE = 2
#MIXER_GETLINEINFOF_COMPONENTTYPE = 3
#MIXER_OBJECTF_HMIXER = 2147483648
#MIXER_SETCONTROLDETAILSF_VALUE = 0
#MIXER_LONG_NAME_CHARS = 64
#MIXER_SHORT_NAME_CHARS = 16
#MMSYSERR_NOERROR = 0
Structure MIXERLINE_TARGET
dwType.l
dwDeviceID.l
wMid.w
wPid.w
vDriverVersion.l
szPname.B[32]
EndStructure
Structure MIXERLINE
cbStruct.l
dwDestination.l
dwSource.l
dwLineID.l
fdwLine.l
dwUser.l
dwComponentType.l
cChannels.l
cConnections.l
cControls.l
szShortName.B[16]
szName.B[64]
Target.MIXERLINE_TARGET
EndStructure
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.B[#MIXER_SHORT_NAME_CHARS]
szName.B[#MIXER_LONG_NAME_CHARS]
lMinimum.l
lMaximum.l
reserved.l[10]
EndStructure
Procedure MIXER_setVolume(Type.l, NewVolume.l)
ml.MIXERLINE
mlc.MIXERLINECONTROLS
mc.MIXERCONTROL
mcd.MIXERCONTROLDETAILS
mcdu.MIXERCONTROLDETAILS_UNSIGNED
result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER)
If result = #MMSYSERR_NOERROR
ml\cbStruct = 168
ml\dwComponentType = Type
result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE)
If result = #MMSYSERR_NOERROR
mlc\cbStruct = 24
mlc\dwLineID = ml\dwLineID
mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME
mlc\cControls = 1
mlc\pamxctrl = @mc
mlc\cbmxctrl = 148
result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
If result = #MMSYSERR_NOERROR
mcdu\dwValue = NewVolume
mcd\cbStruct = 24
mcd\dwControlID = mc\dwControlID
mcd\paDetails = @mcdu
mcd\cbDetails = 4
mcd\cChannels = 1
result = mixerSetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE)
If result = #MMSYSERR_NOERROR
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndIf
EndIf
EndIf
EndProcedure
NewVolume.L = 5000
If MIXER_setVolume(#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, NewVolume)
Debug "Neue AudioCD-Lautstärke: " + Str(NewVolume)
EndIf
Verfasst: 09.01.2008 15:52
von Thomas
Ich habs unter PB 3.3 ausprobiert ...
Code: Alles auswählen
#MIXERCONTROL_CONTROLTYPE_VOLUME = 1342373889
#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = 4101
#MIXER_GETLINECONTROLSF_ONEBYTYPE = 2
#MIXER_GETLINEINFOF_COMPONENTTYPE = 3
#MIXER_OBJECTF_HMIXER = 2147483648
#MIXER_SETCONTROLDETAILSF_VALUE = 0
#MIXER_LONG_NAME_CHARS = 64
#MIXER_SHORT_NAME_CHARS = 16
#MMSYSERR_NOERROR = 0
Structure MIXERLINE_TARGET
dwType.l
dwDeviceID.l
wMid.w
wPid.w
vDriverVersion.l
szPname.b[32]
EndStructure
Structure MIXERLINE
cbStruct.l
dwDestination.l
dwSource.l
dwLineID.l
fdwLine.l
dwUser.l
dwComponentType.l
cChannels.l
cConnections.l
cControls.l
szShortName.b[16]
szName.b[64]
Target.MIXERLINE_TARGET
EndStructure
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS]
lMinimum.l
lMaximum.l
reserved.l[10]
EndStructure
Procedure MIXER_setVolume(Type.l, NewVolume.l)
ml.MIXERLINE
mlc.MIXERLINECONTROLS
mc.MIXERCONTROL
mcd.MIXERCONTROLDETAILS
mcdu.MIXERCONTROLDETAILS_UNSIGNED
result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER)
If result = #MMSYSERR_NOERROR
ml\cbStruct = 168
ml\dwComponentType = Type
result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE)
If result = #MMSYSERR_NOERROR
mlc\cbStruct = 24
mlc\dwLineID = ml\dwLineID
mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME
mlc\cControls = 1
mlc\pamxctrl = @mc
mlc\cbmxctrl = 148
result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
If result = #MMSYSERR_NOERROR
mcdu\dwValue = NewVolume
mcd\cbStruct = 24
mcd\dwControlID = mc\dwControlID
mcd\paDetails = @mcdu
mcd\cbDetails = 4
mcd\cChannels = 1
result = mixerSetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE)
If result = #MMSYSERR_NOERROR
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndIf
EndIf
EndIf
EndProcedure
NewVolume.l = 50000 ;alle Werte von 0 bis 65535
If MIXER_setVolume(#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, NewVolume)
Debug "Neue AudioCD-Lautstärke: " + Str(NewVolume)
EndIf
End
so funktionierts!

Verfasst: 09.01.2008 19:51
von Shardik
Thomas hat geschrieben:
Ich habs unter PB 3.3 ausprobiert ...
Thomas, Danke schön, daß Du meinen Code unter PB 3.3 getestet hast. Aber warum hast Du eigentlich meinen ganzen Code noch einmal neu eingestellt? Die einzigen Deiner Änderungen, die ich mit dem guten alten DOS-Befehl fc beim Vergleichen entdeckt habe, bestehen darin, daß Du die Byte-Deklarationen von .B in .b abgeändert hast (Ist dies wirklich nötig in PB 3.3?), eine End-Anweisung ans Ende gepackt hast (lief es sonst nicht in PB 3.3?) und die NewVolume-Einstellung von 5000 auf 50000 abgeändert hast mit einem Kommentar, daß die Werte von 0 bis 65535 erlaubt sind. Eine kurze Erläuterung Deiner (wirklich nötigen?) Änderungen wäre nicht schlecht gewesen...

Verfasst: 10.01.2008 07:26
von Thomas
ob ich jetzt die 'nderungen, oder den ganzen Code poste ist doch egal ...
Und das Ändern von "B" nach"b" war tatsächlich nötig (hat mich auch gewundert).