2013-03-13 17 views
5

To jest mój pierwszy raz i chciałbym wykonać równoległy proces za pomocą funkcji Windows CreateProcess. Opierając się na przykład w MSDN stworzyłem LPTSTR "(non-const) TCHAR string"command line argumentu jak tenbłąd C3861: "_tcsdup": nie znaleziono identyfikatora

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

The LPTSTR Linia argumentu char and string types are discussed here

komenda jest przekazywana do CreateProcess jak ten

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

a tymi nagłówkami są obecne

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

Na kompilacji to jest błąd:

error C3861: '_tcsdup': identifier not found 

Poszukiwanie tego błędu znaleziono the same error but the solution was specific to using a .NET framework zamiast wyjaśnianie error C3861: '_tcsdup'

Nie wiem, czy to związane, ale istnieje również error C2059: syntax error : ')' na if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl;

W jaki sposób naprawiono ten błąd? I co się z tym dzieje?

Używam również funkcji CreateProcess as a learning step towards learning the Linux fork() - Interfejs Visual Studio jest łatwiejszy w użyciu, a po debugowaniu i działa, zmieni się na interfejs g ++ i zmieni się na fork() i od tego momentu debuguję - więc rozwiązanie który prowadzi do fork(), jeśli to możliwe, jest najbardziej korzystny.

+0

Musisz '' #include (lub zmień '_tcsdup' na' strdup' i zaprzestań używania makr 'T'). –

+3

Wow ... używasz 'CreateProcess' do nauki' fork'? Dlaczego nie nauczyć się "widelca"? To są bardzo różne bestie. – nneonneo

+0

Jedyne co mają wspólnego 'fork' i' CreateProcess' jest to, że oba są funkcjami ... Tinkering z 'CreateProcess' jest tak samo prawdopodobne, że pomoże ci zrozumieć' fork' jako uczenie się francuskiego może pomóc ci mówić po japońsku . –

Odpowiedz

5

Dodaj następujące obejmują:

#include <tchar.h> 
+0

błąd C2440: "inicjowanie": nie można przekonwertować z "wchar_t *" na "LPTSTR []" –

+3

Eh. Wystarczy stracić 'TCHAR's i' TEXT ("string") 's i' _tcsdup's i takie. Użyj 'wchar_t' i' L 'string '' i 'wcsdup' lub' char' i '" string "' i 'strdup'. Nie ma żadnego powodu, by pisanie char schizo już nie było ważne. – cHao

+0

Co do przyczyny tego błędu, chociaż ... 'LPTSTR stuff []' nie jest tym, czego potrzebujesz. Chcesz 'some_char_type stuff []' lub 'some_char_type * stuff'. Pierwszy daje ci zestaw wskaźników do łańcuchów. – cHao

3

_tcsdup jest makro, które mapy do realizacji funkcji w zależności od ustawień Unicode. Ponieważ nie zawarłeś pliku nagłówkowego (tchar.h), kompilator uważa, że ​​jest to symbol i emituje błędny kod.

zależności od rzeczywistych zlokalizować mapy Ustawienia _tcsdump do jednego z tych:

  • _strdup
  • _mbsdup
  • _wcsdup

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

Powiązane problemy