Frage

mit c #, ich versuche, Befehlszeilenargumente mit process.start ():

zu einem neuen Prozess weiterzuleiten. generasacodicetagpre.

meine c-Anwendung Demo.exe Nur Echos Die Befehlszeilenargumente:

generasacodicetagpre.

Wenn ich meine Anwendung von cmd.exe starte, bekomme ich angemessene Ausgabe:

generasacodicetagpre.

Wenn ich die C # -Anwendung verwende, ist das einzige, was ich bekomme, ist das Pfadargument bei Argv [0]:

generasacodicetagpre.

Task Manager zeigt Befehlszeilenargumente für jede Methode zum Starten von Demo.exe: Bildbeschreibung eingeben

Warum erhält meine C-Anwendung nicht die Befehlszeilenargumente von der C # -Anwendung?

bearbeiten @hvd schlug vorgeschlagen, ich benutze getcommandline (). Hier ist der Code und das Ergebnis davon:

generasacodicetagpre.

Ausgang:

generasacodicetagpre.

ist es möglich, dass die C-App die Args als eine Zeichenfolge empfängt, jedoch nach dem ersten \ im Pfad alles ignoriert?

edit: Ich habe unten eine Antwort hinzugefügt. Es ist eine Problemumgehung, aber ich bin mir nicht sicher, welche Sache meines Problems ist.

War es hilfreich?

Lösung

Ich konnte Ihr Problem reproduzieren. Ich hatte keinen Zugriff auf C, also habe ich C ++ in Visual Studio 2013 verwendet. Es scheint, dass C # mit startinfo die Argumente als unicode- Zeichen übergibt. Daher ist das erste Byte Nicht-Null, während das 2. Byte wahrscheinlich 0 Bits dauert, was dazu führt, dass nur das erste Zeichen angezeigt wird, da das Sait-Terminierungszeichen anzeigt. Wenn ich Druckf verwendet habe, funktionierte es nicht, ich musste _tprintf verwenden, um zu sehen, was passiert ist. Und Printf handhabt nicht mit unicode . DRUCKF funktioniert nicht nur nicht, Ihr C-Programm, wenn argv unicode nicht mit 1 Byte-Zeichen in eine Zeichenfolge übersetzt wird. Während Tchar (Wide CHAR) und TPRINTF in C ++ ist, ebenso wie C # nativ.

also, wenn Sie es den anderen Weg getan haben, mit "cmd.exe" anzurufen, um "/ c demo.exe eins zwei drei" cmd nicht passiert String als unicode . Das ist meine Hypothese, Angesichts der Ergebnisse, die ich bekomme.

Verwandte Frage auf stackoverflow

Der C ++ - Code, der die Argumente korrekt (tprintf) angezogen hat und falsch (printf)

generasacodicetagpre.

}

Dies ist der C # -Code, der es aufgerufen hat

generasacodicetagpre.

Nur für Informationszwecke, C #, die das C # anruft, hat auch gearbeitet. Die mutmaßliche Ursache ist wiederum, dass C # die Argumente an Ihr C-Programm als unicode -Zeichen übergeben.

Der C # -Code, der als das aufgerufene Ziel funktioniert.

generasacodicetagpre.

Andere Tipps

Ich bin heute zurückgekommen und habe ein Problemumgeheimnis.Ich verstehe nicht, warum mein ursprünglicher Versuch nicht funktioniert hat.

Hier ist der Unterschied auf der Befehlszeile zwischen dem Tippen von demo.exe und "demo.exe".

generasacodicetagpre.

Der Prozess.Start () Anruf schien die Sorte "Demo.exe" zu tun.

funktioniert nicht:

generasacodicetagpre.

funktioniert:

generasacodicetagpre.

Hat jemand irgendwelche Ideen, warum die erste Methode nicht funktioniert?

Versuchen Sie es mit

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top