Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Andi

Frischling

  • »Andi« ist der Autor dieses Themas

Beiträge: 37

Beruf: Student

  • Private Nachricht senden

1

11.07.2005, 11:21

Fehler bei Datei öffnen

Moinsen,

nachdem ich letzte Woche schon Probleme mit der Pfadumwandlung hatte, hab ich jetzt ein neues Problem.

Ich will eine Befehlszeile mit mehreren Parametern in einer DOS- Eingabeaufforderung starten. Das hat die Form:

abc.exe -i xyz.wrl... .

Ich will der ersten Datei mehrere Parameter übergeben. Wenn ich den ganzen Befehl per hand in einen CString schreib haut alles hin. Wenn ich aber den Befehl durch mehrere CStrings zusammenbau gehts nicht mehr. Ich lese das Modell mittels CFileDialog ein. Da krieg ich einen CString mit dem Pfad zurück. Wenn ich den hinten anfüge, also z.B.

szlstfile = wrlDlg.GetPathName(); //bestimmt das zu ladende Modell
fuege_doppeltenBackslash_ein(szlstfile); fügt doppelte Backslashes in den Pfad ein
WinExec("abc.exe -i "+ szlstfile+ "... ", SW_SHOW);

hauts nich mehr hin.
Wo ist da der Fehler, wenn

WinExec("abc.exe -i C:\\...\\xyz.wrl -r... ", SW_SHOW);

geht??

Ich bin am Verzweifeln!!
Andi

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

11.07.2005, 12:20

Hm, es wäre sehr hilfreich wenn du den typ von szlstfile angeben würdest. Ich vermute mal das es ein char Zeiger ist in folgender Form:

Quellcode

1
2
char sztest[128];
char* sztest2;


Wenn ja dann ist das klar. Char (character) speichern nur ein ZEICHEN. Nicht eine Zeichenfolge. Das hesst du brauchst viele Chars für einen Folge von Zeichen (siehe oben) dies berwerkstelligt man durch einen Zeiger.

Man kann aber Zeiger und strings nicht addieren

also ist "xyz"+sztest; völliger Blödsinn. Nimm statt char* lieber den typ string in der standartbibo von C/C++

Anonymous

unregistriert

3

11.07.2005, 13:23

nene, szlstfile ist ein CString.

Den definiere ich als public, so das alle Methoden drauf zugreifen können. Mit der einer Methode:

void CMFCDlg::OnBnClickedButton1()
{
...
}

erstelle ich einen CfileDialog und speicher den kompletten Pfad in szlstfile.
Dann mach ich aus jedem "\" --> "\\", weil sonst die einelnen Backslashes ein Escape- Sequenzen aufgefasst werden.

In einer zweiten Methode:

void CMFCDlg::OnBnClickedButton2()
{
...
}

will ich dann diese szlstfile zu meinem bestehenden CString, der den ersten Teil den Kommadozeile beinhaltet, dazuaddieren.
Dabei kommt der Fehler. Muss ich vieleicht die szlstfile- Variable anders definieren? Lass ich mir die Variable in der zweiten Methode in einer Messagebox anzeigen, wird der Pfad korrekt angezeigt. Das ist sehr merkwürdig!

4

11.07.2005, 14:20

mach doch mal:

C-/C++-Quelltext

1
2
3
4
CString test;

test = "abc.exe -i "+ szlstfile+ "... ";
cout<<test<<endl;


und schau was da rauskommt.

Anonymous

unregistriert

5

11.07.2005, 14:57

hab ich schon, und das haut hin.

Ich hab noch bisschen probiert und rausgefunden, dass mein Arbeitsverzeichnis verändert wird, wenn ich den CfileDialog aufruf und Modelle aus anderen Verzeichnissen lade. Dadurch kann meine exe- Datei nicht mehr gefunden werden und der Befehl nicht ausgeführt werden.
Ich lese also vorher das aktuelle Arbeitsverzeichnis aus und füge das vor den Befehl an. Dann gehts wieder.


Wer hat sich nur so´n Scheiß ausgeacht!! :P

Bis denne
Andi

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

11.07.2005, 20:49

stimmt, habe gar nicht daran gedacht, das leigt an der WinAPI methode, naja unwichtig. Entweder du machst es anders oder nimmst den Pfad des Programmes ;)

Werbeanzeige