Ошибка C3861: '_tcsdup': идентификатор не найден

Это мой первый раз, и я хотел бы сделать параллельный процесс, используя функцию Windows CreateProcess. На основе примера в MSDN я создал LPTSTR Аргумент командной строки "(неконстантная) строка TCHAR", подобный этому

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

LPTSTR и другие типы символов и строк обсуждаются здесь

Аргумент командной строки передается 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

Поиск этой ошибки обнаружил ту же ошибку, но решение было специфическим для использования.NET Framework, а не объяснения error C3861: '_tcsdup'

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

Как исправить эту ошибку? И что с этим происходит?

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

2 ответа

Решение

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

#include <tchar.h>

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

В зависимости от фактических настроек locate _tcsdump сопоставляется с одним из них:

  • _strdup
  • _mbsdup
  • _wcsdup

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

Другие вопросы по тегам