CreateProcess 创建进程 问题
STARTUPINFO Si;
PROCESS_INFORMATION Pi;
memset(&Si, 0, sizeof(STARTUPINFO));
Si.cb = sizeof(STARTUPINFO);
Si.dwFlags = STARTF_USESHOWWINDOW;
Si.wShowWindow = SW_SHOWNORMAL;
HWND hWnd = AfxGetMainWnd()->m_hWnd;
CreateProcess("C:\\Documents and Settings\\Administrator\\Debug\\Test.exe",(LPSTR)hWnd,NULL,NULL,FALSE,0,NULL,NULL,&Si,&Pi);
上面代码运行到CreateProcess,有时候会报错,Unhandled exception in xx.exe(NTDLL.DLL):0xC0000005:Access Violation.
1、上面代码在单文档工程Demo中,存在于InitInstance()函数。
2、Test.exe是已存在且没有问题的。
3、hWnd已经获取到框架句柄。
4、我尝试把(LPSTR)hWnd改为NULL,程序就没有报错。(难道类型转换错误?)
说一下我的目的:我想把Demo的框架句柄传给Test。用sendmessage让两个进程能够相互发送消息。 mfc windows createprocess exception
[解决办法]
HWND hWnd = AfxGetMainWnd()->m_hWnd;
if(hWnd==NULL)
{
int nErr = GetLastError();
}
[解决办法]
CreateProcess的的第二个引数是LPTSTR lpCommandLine
估计你是想把HWND当成参数传给test.exe的
但是HWND是 handle number
建议改成
CString strHwnd;
strHwnd.ToString((unsigned long)HWND);
CreateProcess("C:\\Documents and Settings\\Administrator\\Debug\\Test.exe",(LPSTR)strHwnd,...);
试试看呗
[解决办法]
应该就是这个。
另:第二个参数是命令行参数,HWND 置为NULL的意思就是没参数,当然不会错
[解决办法]
CreateProcess 第二参数是字符串, 你去使用了一个窗口句柄, 出错那是理所当然的.
因为第二个参数可以为NULL, 所以你的HWND为NULL的时候刚好符合, 所以才不会出错.
仔细看看MSDN吧