用C++ 实现cmd批处理指令的程序。
代码如下:运行报错,怎么改?voidtestCmdCommandLine(){charszCmd[256]={0};//删除d盘中的文件夹new1及其子文件夹中所有内容s...
代码如下:运行报错,怎么改?
void testCmdCommandLine() { char szCmd[256] = {0}; //删除d盘中的文件夹new1及其子文件夹中所有内容 sprintf(szCmd, "%s%s","cmd.exe /k rmdir /s /q ","d://new1"); RunCmdCommandLine(szCmd); } bool RunCmdCommandLine(LPCTSTR lpstrCmd) { STARTUPINFO si = {0}; si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; si.hStdError = (HANDLE)2; si.hStdInput = (HANDLE)0; si.hStdOutput = (HANDLE)1; // si.wShowWindow = SW_HIDE; PROCESS_INFORMATION pi; CreateProcess( 0, (LPSTR)lpstrCmd, 0, 0, TRUE, 0, 0, 0, &si, &pi); return TRUE; }
错误提示:error C2664: 'RunCmdCommandLine' : cannot convert parameter 1 from 'char [256]' to 'LPCTSTR'
error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'LPSTR' to 'LPWSTR' 展开
void testCmdCommandLine() { char szCmd[256] = {0}; //删除d盘中的文件夹new1及其子文件夹中所有内容 sprintf(szCmd, "%s%s","cmd.exe /k rmdir /s /q ","d://new1"); RunCmdCommandLine(szCmd); } bool RunCmdCommandLine(LPCTSTR lpstrCmd) { STARTUPINFO si = {0}; si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; si.hStdError = (HANDLE)2; si.hStdInput = (HANDLE)0; si.hStdOutput = (HANDLE)1; // si.wShowWindow = SW_HIDE; PROCESS_INFORMATION pi; CreateProcess( 0, (LPSTR)lpstrCmd, 0, 0, TRUE, 0, 0, 0, &si, &pi); return TRUE; }
错误提示:error C2664: 'RunCmdCommandLine' : cannot convert parameter 1 from 'char [256]' to 'LPCTSTR'
error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'LPSTR' to 'LPWSTR' 展开
2个回答
展开全部
你使用了W后缀的API,那么就是unicode编码,而char默认是Ansi编码,所以指针是错的,
两个办法,1,直接用CreateProcessA,但是这工程默认是u的, LPCTSTR 就是U的,所以不好,那么第二个办法,把字符串用_T("xxxx")宏处理一下,或者定义一个tchar字符串,CreateProcess里面也不需要LPSTR强制转换,因为他是u工程,默认W后缀,需要U编码字符串,你不能转会char*,
顺带说LPSTR就是char*,LPCTSTR 会跟随工程设置自动转换char* 还是tchar*
两个办法,1,直接用CreateProcessA,但是这工程默认是u的, LPCTSTR 就是U的,所以不好,那么第二个办法,把字符串用_T("xxxx")宏处理一下,或者定义一个tchar字符串,CreateProcess里面也不需要LPSTR强制转换,因为他是u工程,默认W后缀,需要U编码字符串,你不能转会char*,
顺带说LPSTR就是char*,LPCTSTR 会跟随工程设置自动转换char* 还是tchar*
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void testCmdCommandLine() { char szCmd[256] = {0}; //删除d盘中的文件夹new1及其子文件夹中所有内容
sprintf(szCmd, "%s%s","cmd.exe /k rmdir /s /q ","d://new1");
(LPCTSTR)(LPTSTR)szCmd; //将char数组转LPCTSTRRunCmdCommandLine(szCmd); }
bool RunCmdCommandLine(LPCTSTR lpstrCmd) {
USES_CONVERSION; LPWSTR lpstrCmd2= A2W(lpstrCmd) ;//将LPCTSTR转LPSTR STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.hStdError = (HANDLE)2;
si.hStdInput = (HANDLE)0;
si.hStdOutput = (HANDLE)1;
// si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
CreateProcess( 0, (LPSTR)lpstrCmd2, 0, 0, TRUE, 0, 0, 0, &si, &pi); return TRUE; }
试一下,不行把文件发给我
sprintf(szCmd, "%s%s","cmd.exe /k rmdir /s /q ","d://new1");
(LPCTSTR)(LPTSTR)szCmd; //将char数组转LPCTSTRRunCmdCommandLine(szCmd); }
bool RunCmdCommandLine(LPCTSTR lpstrCmd) {
USES_CONVERSION; LPWSTR lpstrCmd2= A2W(lpstrCmd) ;//将LPCTSTR转LPSTR STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.hStdError = (HANDLE)2;
si.hStdInput = (HANDLE)0;
si.hStdOutput = (HANDLE)1;
// si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
CreateProcess( 0, (LPSTR)lpstrCmd2, 0, 0, TRUE, 0, 0, 0, &si, &pi); return TRUE; }
试一下,不行把文件发给我
追问
不行,还是提示那些错误,我是在VS2008下运行的。 LPWSTR lpstrCmd2= A2W(lpstrCmd) ;这句提示:error C2440: '=' : cannot convert from 'LPCTSTR' to 'LPCSTR'。其他 的错误没变。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |