2013-03-13 104 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")); 

的LPTSTR等char and string types are discussed here

命令行参数被传递给CreateProcess这样

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

而这些标题的are present

#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'

不知道是否有关,但也有对if (!CreateProcess(NULL, szCmdline, /*...*/)) cout << "ERROR: cannot start CreateProcess" << endl;

error C2059: syntax error : ')'这个错误是如何解决的?而且,这是怎么回事?

而且,我现在用的是CreateProcess as a learning step towards learning the Linux fork()功能 - 在Visual Studio界面是我更容易使用,一旦这个调试和作品,我会改变的G ++接口,并切换到fork(),并从那里调试 - 这样的解决方案导致fork(),如果可能的话,是最有利的。

+0

您需要的#include''(或将'_tcsdup'改为'strdup'并停止使用'T'宏)。 – 2013-03-13 18:12:56

+3

哇...你正在使用'CreateProcess'来学习fork吗?为什么不学习'fork'?这些是非常不同的野兽。 – nneonneo 2013-03-13 18:13:06

+0

'fork'和'CreateProcess'唯一的共同之处在于它们都是函数...修改'CreateProcess'大概可以帮助你理解'fork',因为学习法语可能会帮助你说日语。 – 2013-03-13 18:15:50

回答

5

添加以下包括:

#include <tchar.h> 
+0

错误C2440:初始化:不能从 'wchar_t的*' 转换为 'LPTSTR []' – 2013-03-13 18:23:50

+3

嗯。只要失去'TCHAR'和'TEXT(“字符串”)和'_tcsdup'等等。使用'wchar_t'和'L'字符串''和'wcsdup',或'char'和''string''和'strdup'。再没有什么令人信服的理由让schizo char打字。 – cHao 2013-03-13 18:27:58

+0

至于你为什么会得到这个错误,尽管...'LPTSTR stuff []'不是你想要的。你想'some_char_type stuff []'或'some_char_type * stuff'。第一个是给你一个指向字符串的指针数组。 – cHao 2013-03-13 18:31:40

3

_tcsdup是一个宏观的,这取决于你的Unicode设置映射到实现的功能。由于您没有包含头文件(tchar.h),因此编译器认为它是一个符号并发出错误的代码。

根据实际定位设置_tcsdump映射到其中的一个:

  • _strdup
  • _mbsdup
  • _wcsdup

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

相关问题