2013-03-13 101 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

相關問題