WinCE 4.0 不支持管道(pipe)技术吗?

autoegg 2006-08-01 03:25:36
小弟想移植一段程序从Windows到WinCE下,
其中用到了管道技术,程序如下:

//##ModelId=447E9E350172
void ProcessCom::Run(string programName, string strExit)
{
// TODO
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES sa;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
// MessageBox("Error On CreatePipe()");
return;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

char* pProg = const_cast<char*>(programName.c_str());
if (!CreateProcess(NULL,pProg,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
// MessageBox("Error on CreateProcess()");
return;
}
CloseHandle(hWrite);

char buffer[4096] = {0};
DWORD bytesRead;
bool bExit = false;
while (!bExit)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;

char *token;

char seps[] = "\r\n";
token = strtok( buffer, seps );

while (token != NULL )
{
if (strstr(token, strExit.c_str()))
{
m_pCaller->UpdateFinished(programName);
bExit = true;
break;
}
else
{
m_pCaller->Update(token, programName);
}

token = strtok( NULL, seps );
}
}


return;
}

这一段程序在VC 6上运行没有问题,可是在Embedded VC4.0上,说是不支持CreatePipe。

各位大侠支支招,如何在WinCE下支持pipe?
...全文
393 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
KevinCEC 2006-08-08
  • 打赏
  • 举报
回复
ce系统提供了进程之间的通信机制,比如COM.剪贴板等,在底层实现上都是利用内存映射文件技术.
所以我建议您,利用映射文件技术,这个技术跟windows 下差不多的.
管道是走不通了,不知道ce6.0会不会支持这个技术?期待中
singlerace 2006-08-02
  • 打赏
  • 举报
回复
实际上WinCE上的标准输入输出是可以重定向的,可以用SetStdioPathW把标准输入输出重定向到一个stream driver,然后你的主进程再跟stream driver通信拿到这些信息。具体可以参考WinCE的telnet server sample。
autoegg 2006-08-02
  • 打赏
  • 举报
回复
其实我需要的通信比较简单。
主进程是一个图形界面,子进程是一个Shell脚本。
子进程输出信息到标准输出,主进程从标准输出得到信息,并反映在界面上。

这种情况下,我感觉管道技术比较适合,可惜WinCE下不支持。
子进程仅仅是一个脚本,传消息似乎不太合适吧?
KevinCEC 2006-08-01
  • 打赏
  • 举报
回复
Microsoft Windows NT,Windows 2000,Windows 95以及Windows 98均提供了对它的支持
(但不包括Windows CE).

不知道你要通信什么? 反正ce下不支持, 给你一个提示:
利用内存映射文件实现进程间数据通讯.
利用进程间发消息实现消息的通讯.
sh_liyu98 2006-08-01
  • 打赏
  • 举报
回复
可能把

19,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧