2013-03-13 15 views
5

Dies ist mein erstes Mal, und ich möchte einen parallelen Prozess mit der Windows-Funktion CreateProcess machen. Basierend auf dem Beispiel in MSDN habe ich ein LPTSTR "(non-const) TCHAR string"command line Argument wie diesesFehler C3861: '_tcsdup': Kennung nicht gefunden

LPTSTR szCmdline[] = _tcsdup(TEXT("\C:\\MyProgram_linux_1.1\\MyProgram.exe")); 

Die LPTSTR und andere char and string types are discussed here

Das Argument Befehlszeile übergeben wird CreateProcess wie diese

if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl; 

Und diese Header sind vorhanden

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
#include <strsafe.h> 
#include <direct.h> 
dieser

Auf der Kompilierung ist der Fehler:

error C3861: '_tcsdup': identifier not found 

Eine Suche nach diesen Fehler the same error but the solution was specific to using a .NET framework gefunden eher als Erläuterung der error C3861: '_tcsdup'

nicht sicher, ob es im Zusammenhang, aber es ist auch ein error C2059: syntax error : ')' auf die if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl;

Wie ist dieser Fehler behoben? Und was ist damit los?

Auch ich bin mit der CreateProcess as a learning step towards learning the Linux fork() Funktion - das Visual Studio-Schnittstelle ist für mich einfacher zu bedienen und sobald diese auf Fehler und Werke ist, werde ich auf den g ++ Schnittstelle und wechsle von dort zu fork() und Debug ändern - so eine Lösung das führt zu fork(), wenn möglich, ist das günstigste.

+0

Sie müssen '# include ' (oder ändern Sie "_tcsdup" in "strdup" und stoppen Sie die Verwendung der 'T'-Makros. –

+3

Wow ... verwenden Sie 'CreateProcess', um' fork' zu lernen? Warum nicht einfach "Gabel" lernen? Dies sind sehr unterschiedliche Bestien. – nneonneo

+0

Das einzige, was 'fork' und' CreateProcess' gemeinsam haben, ist, dass sie beide Funktionen sind ... Das Basteln mit 'CreateProcess' ist so wahrscheinlich, dass Sie' fork' besser verstehen, da das Französischlernen Ihnen hilft, Japanisch zu sprechen . –

Antwort

5

hinzufügen die folgenden Angaben enthalten:

#include <tchar.h> 
+0

Fehler C2440: 'Initialisierung': Konvertierung von 'wchar_t *' nach 'LPTSTR []' nicht möglich –

+3

Eh. Verliere einfach die 'TCHAR's und' TEXT ("string") 's und' _tcsdup's und so. Verwende 'wchar_t' und' L "string" 'und' wcsdup' oder 'char' und' 'string'' und' strdup'. Es gibt keinen zwingenden Grund mehr für das Schizo Char Tippen. – cHao

+0

Warum Sie diesen Fehler bekommen, obwohl ... 'LPTSTR stuff []' ist nicht, was Sie wollen. Sie wollen 'some_char_type stuff []' oder 'some_char_type * stuff'. Der erste gibt Ihnen eine Reihe von Zeigern zu Strings. – cHao

3

_tcsdup ist ein Makro, dass die Karten für die Umsetzung Funktion auf Unicode-Einstellungen abhängig. Da Sie keine Header-Datei (tchar.h) hinzugefügt haben, denkt der Compiler, dass es ein Symbol ist und gibt falschen Code aus.

Je nach tatsächlichen lokalisieren Einstellungen _tcsdump Karten zu einer von denen:

  • _strdup
  • _mbsdup
  • _wcsdup

http://msdn.microsoft.com/en-us/library/y471khhc(v=vs.110).aspx