Ошибка 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 ответа
_tcsdup
это макрос, который отображается на функцию реализации в зависимости от ваших настроек Unicode. Поскольку вы не включили заголовочный файл (tchar.h), компилятор считает его символом и выдает неверный код.
В зависимости от фактических настроек locate _tcsdump сопоставляется с одним из них:
- _strdup
- _mbsdup
- _wcsdup
http://msdn.microsoft.com/en-us/library/y471khhc(v=vs.110).aspx