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