STARTUPINFO 结构初始化 学习笔记

在学习创建进程时,遇到CREATEPROCESS函数返回0,创建失败。通过调试和查阅资料,发现STARTUPINFO结构体的初始化至关重要。错误地将`si.cb=NULL;`改为`memset(&si, 0, sizeof(STARTUPINFO));`后,进程创建成功。了解到memset用于填充内存块,避免了结构体初始化的错误。进一步简化结构体成员,通过逐个注释测试,确定仅需要的成员,完成学习笔记。" 118992568,9197177,使用快慢指针找到链表环的起始位置,"['算法', '链表', '双指针']
摘要由CSDN通过智能技术生成

<span style="font-family:Arial, Helvetica, sans-serif;">//原文代码:</span>
<span style="font-family: Arial, Helvetica, sans-serif;">STARTUPINFO si = sizeof(si);</span>
PROCESS_INFORMATION pi;
char* szCommandLine ="notepad"; //notepad是打开记事本
::CreateProcess(NULL,szCommandLine,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);

 STARTUPINFO 此结构在《windows 程序设计第二版》--王艳平中的初始化是:STARTUPINFO si =sizeof(si);

  我在VC6.0编译器中用这样的初始化,编译没有错误 ,但是创建进程就失败了。 

 起初以为是我抄错了,核对了一下代码,没有错。就开始找一下是不是程序代码那里定义错了,毕竟这本书是比较老的书了。

 经过调试:创建进程函数CreateProcess返回是0,创建失败。

还好这段代码才几行,找出错误对我这个初学者来说还是可以找出来的。

既然是创建进程失败,说明给的参数是有错的,这个创建进程总共就三个参数给传值其他的都是设置NULL(默认)。

我最开始怀疑的是szCommandLine 这个字符串指针,因为我知道有的程序是要给直接路径的。所以我就把szCommandLine =“c:\\windows\notepad.exe”改成这样。

但运行还是不行。那就说明不是这里的问题,我就再看一下这个CreateProcess的SDK,原来这个函数是可以不用给直接路径的,它会自动搜索系统中的文件。

这个时候我把目光转向这个STARTUPINFO 这个结构体,在书本中有提到这个函数一定要初始化cb。这个时候我就把si=sizeof(si); 这个初化改成si.cb=NULL;

运行之后还是创建进程失败。这个时候我真的没有办法,因为我是自学+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值