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

我一直在将 LPTSTR 转换为 int 。

提前致谢。

有帮助吗?

解决方案

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

使用 _ttoi 或者 _tstoi 用于与字符宽度无关的转换方式。

另请参阅

其他提示

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

有多种方法可以将参数从父进程传递到由父进程创建的子进程 CreateProcess() 功能。如果您可以将这些参数编码为大小合理的字符串,然后通过命令行参数( lpCommandLine CreateProcess 的参数)可能是最直接和可移植的,环境变量位居第二。

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

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

我的建议是使用像_tcstol而非_ttoi,这样你就可以处理错误条件,如字符串中的非数字。例如:

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

在这两种情况下,结果将是0,但仅在第二情况下,存在在转换时发生错误。

尝试 atoi() 函数(或适当的版本,如果你“重新使用宽字符)将字符串转换为整数。

LPTSTR是一个指向字符串的指针,所以如果你想要的是代表字符串的值的int你不应该将其转换为一个int。

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

e.g。

INT NUM = _wtoi(FOO);

其中,foo是一个LPTSTR。

编辑:上述仅工作正常,如果LPTSTR是Unicode字符串。即_UNICODE定义。如果不是你应该使用的atoi。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top