3

我在创建进程时传递了一些数字参数(在 VC++ 中)

我坚持将 LPTSTR 转换为 int。

提前致谢。

4

5 回答 5

12

LPTSTR 只是一个指向字符或宽字符字符串的长指针。

使用_ttoior_tstoi用于与字符宽度无关的转换方式。

另见

于 2009-02-02T19:59:19.940 回答
2

盖克!你到底想做什么?您的问题是在父进程端(调用CreateProcess())还是在子进程端?

有几种方法可以将参数从父进程传递到CreateProcess()函数创建的子进程。如果您可以将这些参数编码为大小合理的字符串,那么通过命令行参数(lpCommandLineCreateProcess 的参数)传递它们可能是最直接和可移植的,第二个是环境变量。

如果你有一个数据结构,你不能在一个合理大小的字符串中编码(或者因为它是大量的内存,或者它不容易序列化),那么你需要求助于一些进程间通信的方法。文件或共享内存块是执行此操作的两种方式。在任何一种情况下,您都需要为孩子找到一个商定的位置(如果是文件,则为文件路径,或共享内存块的名称),然后将此字符串作为命令行传递参数或环境变量。

如果您尝试lpCommandLine在子进程中解析参数,那么这就是其他人的建议。

于 2009-02-03T01:29:02.943 回答
1

尝试使用该atoi()函数(如果您使用宽字符,则使用适当的版本)将字符串转换为整数。

于 2009-02-02T19:59:13.093 回答
1

我的建议是使用 _tcstol 而不是 _ttoi 之类的东西,这样您就可以处理错误情况,例如字符串中的非数字。例如:

int result = atoi("0");
result = atoi("foo");

在这两种情况下,结果都是 0,但只有在第二种情况下,转换才会出错。

于 2009-02-02T21:13:46.297 回答
-1

LPTSTR 是指向字符串的指针,因此如果您想要的是表示字符串值的 int,则不应将其转换为 int。

如果您知道字符串包含数字,例如“1234”,您应该能够使用 _wtoi 函数将其转换为 int

例如

int num = _wtoi(foo);

其中 foo 是 LPTSTR。

编辑:仅当 LPTSTR 是 UNICODE 字符串时,上述内容才能正常工作。即定义了_UNICODE。如果不是,你应该使用atoi。

请参阅http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

于 2009-02-02T20:02:54.707 回答