百分问 有关管道的问题 如何在两个进程中使用匿名管道通讯 ,两个进程不存在父子进程关系!如能解决这个问题另开贴结分谢谢:〉 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能用匿名管道,而是用命名管道才行,CreateNamedPipe.自己去查吧。记得给百分喽。:) 建议:同一台机器上不同进程之间的通信最好用内存映射。HOHO 我的项目里用的就是匿名的 CreatePipe(&hChildRead,&hParentWrite,&sa,0); CreatePipe(&hParentRead,&hChildWrite,&sa,0);ONTIME里再处理。定义消息及数据结构。 哈哈哈rsp19801226(飞在天上的小草~~) 不懂装懂的家伙事实证明使用匿名管道完全没问题看来你只能得一分了我来贴出代码吧由于是掩饰 代码简单句柄需要手动输入Server 代码:int _tmain(int argc, _TCHAR* argv[]){ SECURITY_ATTRIBUTES saAttr; saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; HANDLE hReadHandle,hWriteHandle; if (! CreatePipe(&hReadHandle, &hWriteHandle, &saAttr, 0)) { printf("Error CreatePipe"); return 0; } HANDLE hTargetProcess =OpenProcessByName("Client.exe"); if(NULL == hTargetProcess) { printf("Error in open Process!"); return 0; } HANDLE hTargetReadHandle = NULL; if(FALSE==DuplicateHandle(GetCurrentProcess(),hReadHandle,hTargetProcess,&hTargetReadHandle,0, FALSE, DUPLICATE_SAME_ACCESS)||hTargetReadHandle == NULL) { printf("Error in DuplicateHandle!"); return 0; } DWORD dwRes=(DWORD )hTargetReadHandle; printf("the value of the Handle is %u\n",dwRes); WriteFile(hWriteHandle,"Haha ,I am devil",(DWORD )strlen("Haha ,I am devil"),&dwRes,NULL); WaitForSingleObject(hTargetProcess,INFINITE); return 0;}Client 代码:int _tmain(int argc, _TCHAR* argv[]){ try { DWORD dwHandle=0; cin>>dwHandle; HANDLE hInput = (HANDLE)dwHandle; char chBuf[BUFSIZE]; DWORD dwRead=0; BOOL bSuccess = ReadFile(hInput, chBuf, BUFSIZE, &dwRead, NULL); if(TRUE == bSuccess) { chBuf[dwRead]=0; cout<< chBuf<<endl; } else { cout<<"Error"<<endl; } } catch(...) { } getch(); return 0;}随便谁在Re一下拿剩下的19分,先到先得,哈哈 呵呵已经这么多人回了那我结贴吧不好意思上几次悬赏100分的帖子都没解决分就大家分了这次决定见到兔子在撒鹰等有人解决问题在给分 不过看来是省了这20分哥几个分了吧to raymonzhao(Raymon):谢谢你的建议,但是我的项目希望在进程之间维护一个类stream的通讯渠道使用共享内存还需要考虑同步和边界条件等不如这个管道好用嘿嘿 为什么用DWORD,不用int 下班了,留个帖.你感觉C++最难的语法是哪一部分? MFC中UDP接收的问题 请问:基于CEditView的CView如何实现文档内容显示?即串行化后CView通过什么函数将内容显出来 怎么加载库?? 问下关于创建按钮的问题。 以前按照vc的时候没有装installshield,现在添加找不到它,请问它在哪里? 高手帮个忙把!!!!!! HTTP报文的请求信息 还是没有解决,郁闷 Parsing Error: Expectde ")"; 如何隐蔽和显现指定PID进程的窗口。
CreatePipe(&hParentRead,&hChildWrite,&sa,0);ONTIME里再处理。定义消息及数据结构。
rsp19801226(飞在天上的小草~~)
不懂装懂的家伙
事实证明使用匿名管道完全没问题
看来你只能得一分了
我来贴出代码吧
由于是掩饰 代码简单
句柄需要手动输入
Server 代码:int _tmain(int argc, _TCHAR* argv[])
{
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
HANDLE hReadHandle,hWriteHandle;
if (! CreatePipe(&hReadHandle, &hWriteHandle, &saAttr, 0))
{
printf("Error CreatePipe");
return 0;
}
HANDLE hTargetProcess =OpenProcessByName("Client.exe");
if(NULL == hTargetProcess)
{
printf("Error in open Process!");
return 0;
}
HANDLE hTargetReadHandle = NULL;
if(FALSE==DuplicateHandle(GetCurrentProcess(),hReadHandle,hTargetProcess,&hTargetReadHandle,0, FALSE, DUPLICATE_SAME_ACCESS)||hTargetReadHandle == NULL)
{
printf("Error in DuplicateHandle!");
return 0;
}
DWORD dwRes=(DWORD )hTargetReadHandle;
printf("the value of the Handle is %u\n",dwRes);
WriteFile(hWriteHandle,"Haha ,I am devil",(DWORD )strlen("Haha ,I am devil"),&dwRes,NULL);
WaitForSingleObject(hTargetProcess,INFINITE);
return 0;
}Client 代码:
int _tmain(int argc, _TCHAR* argv[])
{
try
{
DWORD dwHandle=0;
cin>>dwHandle;
HANDLE hInput = (HANDLE)dwHandle;
char chBuf[BUFSIZE];
DWORD dwRead=0;
BOOL bSuccess = ReadFile(hInput, chBuf, BUFSIZE, &dwRead, NULL);
if(TRUE == bSuccess)
{
chBuf[dwRead]=0;
cout<< chBuf<<endl;
}
else
{
cout<<"Error"<<endl;
}
}
catch(...)
{
}
getch();
return 0;
}
随便谁在Re一下拿剩下的19分,先到先得,哈哈
已经这么多人回了
那我结贴吧
不好意思
上几次悬赏100分的帖子都没解决
分就大家分了
这次决定见到兔子在撒鹰
等有人解决问题在给分
不过看来是省了
这20分哥几个分了吧to raymonzhao(Raymon):
谢谢你的建议,但是我的项目希望在进程之间维护一个类stream的通讯渠道
使用共享内存还需要考虑同步和边界条件等
不如这个管道好用
嘿嘿