EVC 创建进程 然后编译报错
错误如下:
error C2664:'CreateProcessW' : cannot convert parameter 10 from 'struct CProcessPracticeDlg::PROCESS_INFORMATION *' to 'struct _PROCESS_INFORMATION *'
我的代码很简单:就是定义一个全局结构体类型,然后在函数里面定义一个结构变量,接着创建进程。(代码直接是从《EVC高级编码及其应用开发》书上搬过来的)
见代码:
结构体定义
typedef struct _PROCESS_INFORMATION{
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} _PROCESS_INFORMATION;
bool CProcessPracticeDlg::WinExec(LPCTSTR FileName)
{
PROCESS_INFORMATION processInfo; ------------------>错误定位此处
if(! CreateProcess(FileName,NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE,NULL,NULL,NULL,&processInfo))
{
return false;
}
CloseHandle(processInfo.hThread);
CloseHandle(processInfo.hProcess);
return true;
}
void CProcessPracticeDlg::OnBtnExec()
{
// TODO: Add your control notification handler code here
WinExec(_T("calc"));
}
[解决办法]
if(! CreateProcess(FileName,NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE,NULL,NULL,NULL,&processInfo))
改成
if(! CreateProcess(FileName,NULL,NULL,NULL,NULL,CREATE_NEW_CONSOLE,NULL,NULL,NULL,('struct _PROCESS_INFORMATION *)&processInfo))
试试
[解决办法]
typedef struct _PROCESS_INFORMATION{
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} _PROCESS_INFORMATION;
这个是你自己定义的类型,而CreateProcess函数的参数用的是系统定义的PROCESS_INFORMATION类型,
虽然这两个结构体结构完全一样,但是对于编译器来说是两种不同的类型。
依我看,完全没必要定义_PROCESS_INFORMATION这个结构,直接使用系统带的PROCESS_INFORMATION就行