 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 03.01.2008, 02:45 Titel: großes problem mit ordnern :-(( ---> c:/ord1/ord/ord us |
|
|
Hallo,
so langsam blicke ich nicht mehr durch hier in der Ordner Struktur ;-(((
ich habe in Freebasic folgende wavmerge.exe erstellt (setzt zwei wav dateien zusammen durch Aufruf von wavmerge.exe wav1.wav wav2.wav neueswav.wav)
Code: |
DIM header AS STRING * 44
DIM AS INTEGER filelen1, filelen2, totallen
DIM AS STRING buffer1, buffer2
DIM AS STRING file1, file2, file3
file1= COMMAND$(1)
file2= COMMAND$(2)
file3= COMMAND$(3)
OPEN file1 FOR BINARY AS #1
OPEN file2 FOR BINARY AS #2
GET #1,1,header
GET #1,41,filelen1
GET #2,41,filelen2
totallen = filelen1 + filelen2 'gesamte neue länge
buffer1 = SPACE(filelen1)
buffer2 = SPACE(filelen2)
GET #1,45,buffer1
GET #2,45,buffer2
CLOSE #2
CLOSE #1
OPEN file3 FOR OUTPUT AS #3 'evtl datei leeren
CLOSE #3
OPEN file3 FOR BINARY AS #3
PUT #3,1,header
PUT #3,41,totallen
PUT #3,45,buffer1
PUT #3,,buffer2
CLOSE #3
|
Über Visual Basic rufe ich die EXE-Datei dann aus meinem Programm auf.
Das Problem ist nun, das er mir die Fehlermeldung
Procedureaufruf oder Argument unzulässig Fehler Nr.5 ausgibt ?
Ich denke, das Problem muß irgendwie in der ORDNERANGABE LIEGEN
MEIN VBPROGRAMM LIEGT IM ORDNER
D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\
hier sind auch die zwei "Wav-Dateien" enthalten, die ich zusammenfügen möchte also genau heißen diese so
erstes WAV FILE -> D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\DCC1BF17-190E.wav
zweites WAV FILE ->D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\970182F8-D27B.wav
Jetzt setze ich in Visual Basic den Shell Befehl ein und rufe mein FREEBASIC.exe PROGRAMM AUF, WAS DIESE WAVS NUN ZUSAMMENFÜGEN SOLL ...und wie gesagt, obiger Fehler erscheint?
ich ich weiß nicht, woran das jetzt noch liegen könnte?
der genaue Shell Aufruf ist (bitte nicht erschrecken...)
D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\wavmerge.exe D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\5AAC8807-74AE.wav D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\stille.wav D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\EUEWAVDATEI.wav
kann es sein, das die Parameter, die ich an das Freebasic Programm übergebe, mit den ganzen Ordnern nicht zurecht kommt? oder mit den "-"????
Über Antwort sehr ich sehr dankbar und erleichtert...DANKE im Vorfeld+Gruß
Tom |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 03.01.2008, 03:08 Titel: |
|
|
pfade und dateinamen mit leerzeichen müssen in anführungszeichen gesetzt werden? oder meinst du, die konsole oder freebasic errät, welches leerzeichen jetzt zum pfad/name gehört und welches zwei parameter trennt?
wavmerge.exe "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\5AAC8807-74AE.wav" "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\stille.wav" "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\EUEWAVDATEI.wav"
gewöhn dir mal an beim eintippen von dem befehl immer nur die ersten zwei drei zeichen der verzeichnis/dateinamen einzugeben und dann tab zu drücken, dann kommen die "" automatisch dazu sobald n leerzeichen drin ist. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 03.01.2008, 12:33 Titel: geht immer noch nicht ;-( |
|
|
Hi,
erstmal danke für die info+tipp mit der tab...
so, jetzt habe ich alles mit anführungszeichen versehen, die fehlermeldung bleibt aber die gleiche ;-(((
Code: | Shell "\wavmerge.exe " & Chr$(34) & "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\a.wav" & Chr$(34) & " " & _
Chr$(34) & "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\stille.wav" & Chr$(34) & " " & Chr$(34) & "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\EUEWAVDATEI.wav" & Chr$(34)
|
also an die shell wird dann
Code: | D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\wavmerge.exe "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\a.wav" "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\stille.wav" "D:\VB5 EIGENE PROGRAMME\Recorder V2 - NEU -\EUEWAVDATEI.wav"
|
übergeben! und so sollte es doch dann klappen ?
die files sind natürlich vorhanden! läuft aber nicht?
evtl. noch jemand einen rat, wo der fehlerteufel zugeschlagen haben könnte?
gruß+danke im vorfeld |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 03.01.2008, 12:44 Titel: |
|
|
Ich würde Leerzeichen im Pfad sowieso nach Möglichkeit vermeiden. Probiere mal, alles in einen Pfad zu legen, der keine Leer- oder Sonderzeichen enthält, vielleicht klappt es ja dann besser. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 03.01.2008, 14:22 Titel: hm?!?! |
|
|
Hi,
ja klar, wäre eine möglichkeit, aber das programm nutzen auch andere und ich kann doch nicht im vorfeld sagen, wie deren ordner heißen sollen?!?!
wenn jemand das programm auf e:\programm\was weiß ich\mein wavprogramm z.B. installiert, sollte es doch irgendwie möglich sein, dass das dann klappt...
dennoch danke für deinen rat...
gruß tom |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 03.01.2008, 15:48 Titel: |
|
|
von wem kommt denn der fehler, dein vb-prog oder dein wavmerge? und kannst du den auf eine zeile zurückverfolgen bzw dir sicher sein dass es die shell-zeile ist?
und probier mal den selben befehl ganz normal aus der kommandozeile raus auszuführen, vielleicht siehst du da eher was falsch ist. Wenns da funktioniert haste in deinem vb-prog irgendwas falsch übersetzt. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 04.01.2008, 01:36 Titel: geht nicht |
|
|
hi und danke erstmal...
der fehler kommt von vb und die zeile ist eindeutig mit dem shell aufruf der fehlerteufel ? und ich verstehe das echt nicht...
jetzt habe ich die dateien mal auf c:\ gesetzt und alles läuft ?
der aufruf war
Shell "c:\wavmerge.exe " & Chr$(34) & "c:\frage.wav" & Chr$(34) & " " & Chr$(34) & "c:\antwort.wav" & Chr$(34) & " " & Chr$(34) & "c:\neuefrageantwort.wav" & Chr$(34)
Wieso geht das mit den langen ORDNERN nicht???
Freebasic Problem? Visual Basic Problem? Windows Problem?
Anderer Fehler?
für tipps wäre ich immer noch sehr dankbar....
gruß tom |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 04.01.2008, 02:09 Titel: |
|
|
liegt eher daran, dass VB nicht parameter und exename auseinander halten kann, vermute ich. btw. es geht in VB und FB auch eleganter, man muss nicht CHR(34) benutzen:
Code: |
SHELL """c:\wavmerge.exe"" ""c:\frage1.wav"" ""c:\antwort.wav"" ""c:\neuefrageantwort.wav"""
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 04.01.2008, 02:20 Titel: |
|
|
nein .. das hat nichts mit VB zu tun, wie man hier ersehen kann:
Code: |
Sub Form_Load()
Msgbox Command
End Sub
|
Grundsätzlich sollte man auf leerzeichen in URLs (auch Pfadangaben) verzichten. Und, wenn, dann sollten sie URL-encodet sein.
Natürlich ist es auch möglich, das es an lange verzeichnissnamen hängt. Du soöötets grundsätzlich anführungsstriche nutzen, um Pfade einzuklammern, damit sie später richtig genutzt werden, bzw. gefiltert werden können.
Hinzu kommt, das dein Programm die " wieder ausfiltern muss, wenn du die Pfadangaben zum öffnen nutzt. Die anführungsstriche kann man sich ersparen, jedoch macht das die filterung im programm sehr sehr schwer, wenn nicht unmöglich.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 04.01.2008, 02:33 Titel: |
|
|
Wenn du die Dateinamen vom VB-Programm an das Fb-Programm übergibst, fällt mir hier noc heine variante ein...
http://www.vbarchiv.net/archiv/tipp_details.php?pid=172
Damit die Dateinamen in 8.3-Dateinamen umwandeln. Die können keine Leerzeichen enthalten, stellen aber genau die selbe Datei dar wie "lange" Dateinamen. Wenn du diese 8.3-Dateinamen an das FB-Programm übergibst,gibt es keinen ärger mehr mit Leerzeichen  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 04.01.2008, 11:26 Titel: Danke |
|
|
Hi,
vielen Dank für Eure Beiträge...
ich habs jetzt hinbekommen
Gruß tom |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 04.01.2008, 12:18 Titel: bräuchte doch nochmal hilfe ;-( |
|
|
hmm die lösung war doch nicht so das wahre ;-(
weiß zufällig jemand, wie ich unteren code in visual basic 5/6 übersetzen könnte?
habe schon versucht, aber das problem ist irgendwie der get/put befehl und kriege diesen nicht 100% in VB übersetzt ...
weiß jemand, wie man den code in vb5 übersetzten könnte?
dann habe ich keine probleme mehr mit den ordnern
Danke im Vorfeld+immernoch ein großen Lob an das Forum hier ))
gruß tom
Code: | DIM header AS STRING * 44
DIM AS INTEGER filelen1, filelen2, totallen
DIM AS STRING buffer1, buffer2
DIM AS STRING file1, file2, file3
file1="c:\abc.wav
file2="c:\def.wav"
file3="c:\abcdef.wav"
OPEN file1 FOR BINARY AS #1
OPEN file2 FOR BINARY AS #2
GET #1,1,header
GET #1,41,filelen1 :'???????????????????????????
GET #2,41,filelen2
totallen = filelen1 + filelen2 'gesamte neue länge
buffer1 = SPACE(filelen1)
buffer2 = SPACE(filelen2)
GET #1,45,buffer1
GET #2,45,buffer2
CLOSE #2
CLOSE #1
OPEN file3 FOR OUTPUT AS #3 'evtl datei leeren
CLOSE #3
OPEN file3 FOR BINARY AS #3
PUT #3,1,header:'??????????????????????
PUT #3,41,totallen
PUT #3,45,buffer1
PUT #3,,buffer2
CLOSE #3 |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 04.01.2008, 14:30 Titel: |
|
|
der code sollte genau so laufen, indem du
Code: |
DIM AS Datentyp Variablenname
|
in
Code: |
DIM Variablenname AS Datentyp
|
umändert.
sonst fällt mir auf den ersten blick nichts auf, was man noch ändern müsste.
Bezüglich deinen Fragezeichen...
Code: | GET #1,41,filelen1 :'??????????????????????????? |
eine WAV-Datei wird mit sogenannten RIFF-Headern gespeichert. Da in einer WAV-Datei theoretisch mehrere Header auftreten können und auch noch nach den eigentlichen Wav-Sampeln noch daten stehen könnten (sowas ähnliches wie ID3 bei MP3s), muss die länge der eigentlichen Wav-Samples in dem header angegeben werden. diese länge steht in den Bytes 41-44.
Code: | PUT #3,1,header:'?????????????????????? |
Der eben genante RIFF-Header steht in den Bytes 1-44 und wurde durch
Code: | DIM header AS STRING * 44
GET #1,1,header |
eingelesen. Der Header muss natürlich dann in die neue Datei übertragen werden, aber mit angepasster Länge:
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 04.01.2008, 14:36 Titel: get ist fehlerhaft |
|
|
hi
danke, das mit den strings war mir schon klar , der fehler liegt irgendwie im get befehl von visual basic
vb nimmt diesen nicht an und bricht mit folgender fehlermeldung ab
Laufzeitfehler 458
Variable verwendet einen in Visual Basic nicht unterstützten Typ der Automatisierung
und zeigt mir den get befehl in der vbide an.
falls noch jemand eine idee hat...
gerne
gruß tom |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 04.01.2008, 14:42 Titel: |
|
|
der code läuft bei mir ohne probleme in VB6...
MSDN hat Folgendes geschrieben: | Sie haben versucht, eine Variable zu verwenden, die in einer Klassenbibliothek oder Objektbibliothek mit einemDatentyp definiert worden ist, der von Visual Basic nicht unterstützt wird.
Sie können in einem Visual Basic-Programm keine Variable verwenden, deren Typ Visual Basic nicht kennt. |
irgendwelche verdächtigen variablennamen verwedet? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
tom_verbatim
Anmeldungsdatum: 03.02.2007 Beiträge: 53
|
Verfasst am: 04.01.2008, 15:33 Titel: es läuft ;-) |
|
|
hi,
unerwartete hilfe war nah ES LÄUFT...
wen es interessiert
Code: |
Dim header(43) As Byte
Dim filelen1 As Long, filelen2 As Long, totallen As Long
Dim buffer1() As Byte, buffer2() As Byte
file1 = App.Path & "\a.wav"
file2 = App.Path & "\b.wav"
file3 = App.Path & "\ab.wav"
Open file1 For Binary As #1
Open file2 For Binary As #2
Get #1, , header
Get #1, 41, filelen1
Get #2, 41, filelen2
totallen = filelen1 + filelen2
ReDim buffer1(filelen1 - 1) As Byte
ReDim buffer2(filelen2 - 1) As Byte
Get #1, 45, buffer1
Get #2, 45, buffer2
Close #2
Close #1
If Len(Dir$(file3)) > 0 Then Kill file3
Open file3 For Binary As #3
Put #3, , header
Put #3, 41, totallen
Put #3, 45, buffer1
Put #3, , buffer2
Close #3 |
Gruß Tom |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 04.01.2008, 18:08 Titel: |
|
|
Hi,
mit einer Batch-Datei konnte ich problemlos auf die Dateien und Ordner zugreifen, also mußte es mit FB auch gehen..
Zuerst dachte ich, es wäre ein Problem der Zeilenlänge, das war jedoch nicht richtig: Code: | Dim As String Dir1="D:\VB5 Eigene Programme"
Dim As String Dir2=Dir1 &"\Recorder V2 - NEU -"
Dim As String File0="\wavmerge.exe"
Dim As String File1="\a.wav"
Dim As String File2="\stille.wav"
Dim As String File3="\euedatei.wav"
Dim As String s=!"\34" &Dir1 &File0 &!"\34"
Print Len(s)
Print s
Shell s
s=!"\34\34" &Dir1 &File0 &!"\34 \34" &Dir2 &File1 &!"\34\34"
Print Len(s)
Print s
Shell s
s=!"\34\34" &Dir1 &File0 &!"\34 \34" &Dir2 &File1 &!"\34 \34" &Dir2 &File2 &!"\34\34"
Print Len(s)
Print s
Shell s
s=!"\34\34" &Dir1 &File0 &!"\34 \34" &Dir2 &File1 &!"\34 \34" &Dir2 &File2 &!"\34 \34" &Dir2 &File3 &!"\34\34"
Print Len(s)
Print s
Shell s
Sleep
End | Die wichtigsten Zeilen für meinen Standard-Debugger(Eye.Exe) hab ich dringelassen: es sind die Print-Anweisungen
Eye.Exe funzt übrigens nur zusammen mit Think.Exe, der wiederum nur mit Brain.Exe, aber das ist ja bekannt
(Falls die Sonderzeichen ein Problem sind: Ich habe sie hier erklärt..)
Zu der VB-Klamotte kann ich nichts sagen, da mir dieses Programm fremd ist
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
RatsDevSoftware
Anmeldungsdatum: 22.11.2007 Beiträge: 48
|
Verfasst am: 05.01.2008, 15:41 Titel: |
|
|
Laufen Think.exe und Brain.exe eigtl. in Wine?
(Boar, schon lange nicht mehr das traute "Antwort schreiben" Feld gesehn'  _________________ visit our Homepage!
shift ist verschwendung...
...o gott - ich fang schon wieder an zu spammen... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 05.01.2008, 16:56 Titel: |
|
|
Wieso wine? Das läuft nativ! _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|