我在创建进程时传递了一些数字参数(在 VC++ 中)
我坚持将 LPTSTR 转换为 int。
提前致谢。
LPTSTR 只是一个指向字符或宽字符字符串的长指针。
使用_ttoi
or_tstoi
用于与字符宽度无关的转换方式。
另见
盖克!你到底想做什么?您的问题是在父进程端(调用CreateProcess()
)还是在子进程端?
有几种方法可以将参数从父进程传递到CreateProcess()
函数创建的子进程。如果您可以将这些参数编码为大小合理的字符串,那么通过命令行参数(lpCommandLine
CreateProcess 的参数)传递它们可能是最直接和可移植的,第二个是环境变量。
如果你有一个数据结构,你不能在一个合理大小的字符串中编码(或者因为它是大量的内存,或者它不容易序列化),那么你需要求助于一些进程间通信的方法。文件或共享内存块是执行此操作的两种方式。在任何一种情况下,您都需要为孩子找到一个商定的位置(如果是文件,则为文件路径,或共享内存块的名称),然后将此字符串作为命令行传递参数或环境变量。
如果您尝试lpCommandLine
在子进程中解析参数,那么这就是其他人的建议。
尝试使用该atoi()
函数(如果您使用宽字符,则使用适当的版本)将字符串转换为整数。
我的建议是使用 _tcstol 而不是 _ttoi 之类的东西,这样您就可以处理错误情况,例如字符串中的非数字。例如:
int result = atoi("0");
result = atoi("foo");
在这两种情况下,结果都是 0,但只有在第二种情况下,转换才会出错。
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