【发布时间】:2013-03-01 20:30:20
【问题描述】:
这是我第一次,我想使用 windows CreateProcess 函数进行并行处理。基于 MSDN 上的示例,我创建了一个像这样的 LPTSTR "(non-const) TCHAR string" command line 参数
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;
这些标题都存在
#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() 的解决方案是最有益的。
【问题讨论】:
-
您需要
#include <tchar.h>(或将_tcsdup更改为strdup并停止使用T宏)。 -
哇...你用
CreateProcess来学习fork?为什么不直接学习fork?这些是非常不同的野兽。 -
fork和CreateProcess唯一的共同点是它们都是函数......修补CreateProcess与学习法语一样可能帮助您理解fork可能会帮助你说日语。 -
是的,但我在网上找到的所有内容都表明
CreateProcess是 windows 与fork()最接近的东西 - 在问题源中引用。我确信在我的代码中存在必须修复的并行处理的一般问题,我想在 Visual Studio 中修复这些全局并行处理问题,然后在 g++ 中修复fork()特定问题;如果我走错了方向 - 请指出我的正确 -
@forest.peterson:他们必须在某种程度上关注所有字符类型的源兼容性。曾几何时,schizo char 类型是常态,因为有些系统不支持 Unicode 或其他一些原因坚持使用 8 位字符。除此之外,有些人在某种程度上使用了所有这些,并且拥有三个仅在 char 类型上有所不同的示例是一种浪费。您不必真正关心;您的代码可以决定是否使用宽字符、MBCS 或 ANSI,以及它应该使用的 IMO。
标签: c++ visual-studio-2008 fork createprocess lptstr