当前位置: 代码迷 >> WinCE >> EVC 创建进程 然后编译报错,该如何解决
  详细解决方案

EVC 创建进程 然后编译报错,该如何解决

热度:86   发布时间:2016-04-28 13:07:15.0
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就行
  相关解决方案