Visual c++ CreateProcess不返回extected值

Visual c++ CreateProcess不返回extected值,visual-c++,Visual C++,我想将双引号字符发送到我的CreateProcess函数。我怎样才能做正确的方法?我想发送所有这些字符:“%h” 注:“识别”是一个Imagemagick程序 以下是完整的代码: int ExecuteExternalFile() { SECURITY_ATTRIBUTES secattr; ZeroMemory(&secattr,sizeof(secattr)); secattr.nLength = sizeof(secattr); secattr.bInheritHan

我想将双引号字符发送到我的CreateProcess函数。我怎样才能做正确的方法?我想发送所有这些字符:“%h”

注:“识别”是一个Imagemagick程序

以下是完整的代码:

int ExecuteExternalFile()     
{ 
SECURITY_ATTRIBUTES secattr; 
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;

HANDLE rPipe, wPipe;

//Create pipes to write and read data

CreatePipe(&rPipe,&wPipe,&secattr,0);

STARTUPINFO sInfo; 
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo; 
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL; 
sInfo.hStdOutput=wPipe; 
sInfo.hStdError=wPipe;

CreateProcess(L"C:\\identify",L" -format \"%h\" trustedsnapshot.png",0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);



CloseHandle(wPipe);

char buf[100];
DWORD reDword; 
CString m_csOutput,csTemp;
BOOL res;
do
{
  res=::ReadFile(rPipe,buf,100,&reDword,0);
  csTemp=buf;
  m_csOutput+=csTemp.Left(reDword);
}while(res);

//return m_csOutput;
float fvar; 
//fvar = atof((const char *)(LPCTSTR)(m_csOutput));  ori


//fvar=atof((LPCTSTR)m_csOutput);
fvar = _tstof(m_csOutput);

const size_t len = 256;
wchar_t buffer[len] = {};
_snwprintf(buffer, len - 1, L"%d", fvar);


MessageBox(NULL, buffer, L"test print createprocess value", MB_OK);

return fvar;
}

我需要这个函数从CreateProcess返回整数值。

您编写它的方式应该可以,或者您对它有任何问题吗?

您的问题不是引号。向CreateProcess传递参数的方式有两个问题。第一个是在第二个参数中传递的命令行应该包括命令的名称(即,它应该包括“argv[0]”的值),第二个是重定向(>testt.txt)不由CreateProcess API处理,。除非c:\identify需要这样的参数,否则不应将其包含在命令行中。

我的项目可以编译,但它似乎不会返回我在将其转储到Messagebox时所期望的值。输出应该是一个整数。我刚刚注意到-为什么要在第一个参数中传递-format?在其中,您应该只传递可执行文件的路径,即“C:\IdentificationI已丢弃该部分。当我在windows命令终端上运行“Identification-format”%h“currentsnapshot.png”时,它可以工作。但当从CreateProcess内部运行时,它不工作。请尝试CreateProcess(NULL,L“Identification-format\%h\”trustedsnapshot.png“,0,0,真,正常_优先级|类|创建_否_窗口,0,0,&sInfo,&pInfo);现在可以了。我刚刚意识到可执行文件需要将*.exe放在其名称的末尾。所以对于这种情况:identify.exe
int ExecuteExternalFile()     
{ 
SECURITY_ATTRIBUTES secattr; 
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;

HANDLE rPipe, wPipe;

//Create pipes to write and read data

CreatePipe(&rPipe,&wPipe,&secattr,0);

STARTUPINFO sInfo; 
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo; 
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL; 
sInfo.hStdOutput=wPipe; 
sInfo.hStdError=wPipe;

CreateProcess(L"C:\\identify",L" -format \"%h\" trustedsnapshot.png",0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);



CloseHandle(wPipe);

char buf[100];
DWORD reDword; 
CString m_csOutput,csTemp;
BOOL res;
do
{
  res=::ReadFile(rPipe,buf,100,&reDword,0);
  csTemp=buf;
  m_csOutput+=csTemp.Left(reDword);
}while(res);

//return m_csOutput;
float fvar; 
//fvar = atof((const char *)(LPCTSTR)(m_csOutput));  ori


//fvar=atof((LPCTSTR)m_csOutput);
fvar = _tstof(m_csOutput);

const size_t len = 256;
wchar_t buffer[len] = {};
_snwprintf(buffer, len - 1, L"%d", fvar);


MessageBox(NULL, buffer, L"test print createprocess value", MB_OK);

return fvar;
}