2013-03-13 4 views
5

Это мой первый раз, и я хотел бы сделать параллельный процесс, используя функцию windows CreateProcess. На примере в MSDN я создал LPTSTR "(non-const) TCHAR string"command line аргумент как этотошибка C3861: '_tcsdup': идентификатор не найден

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

The LPTSTR и другие char and string types are discussed here

аргумент командной строки передается CreateProcess как этот

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

И эти заголовки присутствуют

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

На компиляции это ошибка:

error C3861: '_tcsdup': identifier not found 

Поиски этой ошибки найдены the same error but the solution was specific to using a .NET framework, а не объясняя error C3861: '_tcsdup'

Не уверен, что если он связан, но есть также error C2059: syntax error : ')' на if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl;

Как эта ошибка исправлена? И что с этим происходит?

Кроме того, я использую функцию CreateProcess as a learning step towards learning the Linux fork() - интерфейс Visual Studio проще для меня использовать, и как только это будет отлажена и работает, я изменю к интерфейсу г ++ и изменения в fork() и отлаживать оттуда - так решение что приводит к fork(), если это возможно, является наиболее выгодным.

+0

Вы должны '#include ' (или измените '_tcsdup' на' strdup' и перестаньте использовать макросы 'T'. –

+3

Wow ... вы используете 'CreateProcess' для изучения' fork'? Почему бы просто не научиться «вилке»? Это совсем другие звери. – nneonneo

+0

Единственное, что имеет «fork» и «CreateProcess», состоит в том, что они обе функции ... Трюки с помощью «CreateProcess» примерно так же помогут вам понять «fork», поскольку изучение французского языка, вероятно, поможет вам говорить по-японски , –

ответ

5

Добавьте следующие включают:

#include <tchar.h> 
+0

ошибка C2440: 'initializing': не может конвертировать из 'wchar_t *' в 'LPTSTR []' –

+3

Eh. Просто потеряйте 'TCHAR' и' TEXT («string») 's и' _tcsdup' и т. Д. Используйте строки 'wchar_t' и' L ''' и 'wcsdup', или' char' и '" string "' и 'strdup'. Нет никакой веской причины для типизации шизображения. – cHao

+0

Что касается того, почему вы получаете эту ошибку, хотя ... 'LPTSTR stuff []' не то, что вы хотите. Вы хотите 'some_char_type stuff []' или 'some_char_type * stuff'. Первый дает вам массив указателей на строки. – cHao

3

_tcsdup макрос, который сопоставляется функции реализации в зависимости от ваших настроек Unicode. Поскольку вы не включили заголовочный файл (tchar.h), компилятор считает, что он является символом и испускает неправильный код.

В зависимости от фактических локации Настройки _tcsdump карты к одному из тех, кто:

  • _strdup
  • _mbsdup
  • _wcsdup

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

 Смежные вопросы

  • Нет связанных вопросов^_^