#include <windows.h>
#include <iostream>
using namespace std;int main()
{
::STARTUPINFO si={sizeof(si)};
::PROCESS_INFORMATION pi;
//::ZeroMemory(&si,sizeof(si));
//si.cb=sizeof(si);
::ZeroMemory(&pi,sizeof(pi));
char* cmdLine="notepad";
if(!CreateProcess(NULL,(LPWSTR)cmdLine,NULL,NULL,NULL,NULL,NULL,NULL,&si,&pi))
{
cout<<"create process false!!"<<endl;
}
system("pause");
return 0;
}
我猜想主要的问题可能出在上面的红色标记的那个参数上,vs08要求是Wchar型的指针,但是我改了好几次都是运行时错误,请大家帮忙看看,谢谢了,另外可不可能是哪个默认安全属性的结构体有问题呢,不是很熟悉vs08
解决方案 »
- 两个树控件如何保持数据同步更新?
- 关于模板匹配的一个小问题!弄了一天还是没解决!在线等!
- 如何捕获ie提交事件?
- dll 编译问题 急!解决即散分
- 100分求教!!高手请帮忙!!FAT32 在win NT下有个最大分区32G的上限,有什么方法能够解决呢?
- 如何让 __FILE__ 在 _UNICODE 定义下可以用阿?
- 工具条上插入对话框为什么会报错?程序是这样的。。。
- 出现了'class' type redefinition错误,救命呀。
- 一个再也不能小的问题,但我实在搞不懂.
- 求资源<VISUAL C++技术内幕》第6版下载 潘爱民的
- 将xp程序移植到win2000中
- vs2005调试疑问
改变为
TCHAR *cmdLine = _T("notepad");
TCHAR* cmdLine=_T("notepad");
int main()
{
::STARTUPINFO si={sizeof(si)};
::PROCESS_INFORMATION pi;
//::ZeroMemory(&si,sizeof(si));
//si.cb=sizeof(si);
::ZeroMemory(&pi,sizeof(pi));
//char* cmdLine="notepad";
TCHAR* cmdLine=_T("notepad");
if(!CreateProcess(NULL,cmdLine,NULL,NULL,NULL,NULL,NULL,NULL,&si,&pi))
{
cout<<"create process false!!"<<endl;
}
system("pause");
return 0;
}我已经把它改成了这个样子了,可是还是运行时错误,
=========
将这句改成:TCHAR cmdLine[]=_T("notepad");
因为CreateProcess在调用时会改上面的那个字符数组,定义成指针会使它分配在常量区,造成内存访问错。
//si.cb=sizeof(si);
为什么注释掉?
传入的是一个非"常量字符串"地址。CreateProcess实际上会修改我们传给
它的命令行字符串。在CreateProcess返回之前,它会将这个字符串还原为原本形式。
命令行字符串包含文件映像的只读部分,会引起访问违规。
可以将TCHAR* cmdLine=_T("notepad");改为TCHAR cmdLine[]=_T("notepad");