首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

定名管道不同进程直接通信,接收到为空或乱码

2012-08-09 
命名管道不同进程直接通信,接收到为空或乱码。首先说一下我的项目,包括a.exe、b.ll。其中a.exe做一件事情,就

命名管道不同进程直接通信,接收到为空或乱码。
首先说一下我的项目,包括a.exe、b.ll。其中a.exe做一件事情,就是把b.dll注入到记事本程序之中。
现在的问题是我要在b.dll中得到a.exe的目录,如“C:\Users\Administrator\Desktop\xxx”(注:a.exe和b.ll同在该目录下)。 因为b.dll已经被注入到了记事本程序之中,用GetModuleFileName得到的只是“c:\windows\notepad.exe”,而我要的确是“C:\Users\Administrator\Desktop\xxx”。
因为是不同进程间通信,所以我用的命名管道。在a.exe中把目录“C:\Users\Administrator\Desktop\xxx”通过管道给b.dll.但是不知道什么原因,在b,dll中得到的要么为空,要么为乱码,请各位大神帮忙
a.exe之中

C/C++ code
void ServerPipe(char catalogue[]) {    DWORD dwTO = NMPWAIT_USE_DEFAULT_WAIT;//设置连接等待时间    HANDLE hSvr = CreateNamedPipe("\\\\.\\pipe\\test_pipe\\",PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE,3,256,256,dwTO,NULL);    if( INVALID_HANDLE_VALUE == hSvr)    {        AfxMessageBox("Error create/open pipe");    }    else    {        if (ConnectNamedPipe(hSvr,NULL))        {            char bRead[128];            DWORD dwRead,dwWritten;            AfxMessageBox("服务器端准备写入数据");            WriteFile(hSvr,catalogue,129,&dwWritten,NULL);            }        else        {            AfxMessageBox("等待连接时出现错误");        }        CloseHandle(hSvr);    }}

在main函数里面调用:
C/C++ code
char cat[128]="C:\Users\Administrator\Desktop\xxx";ServerPipe(cat);


b.dll里面:
C/C++ code
string ClientPipe() {    HANDLE hClient = CreateFile("\\\\.\\pipe\\test_pipe\\",GENERIC_WRITE |GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);    if(hClient == INVALID_HANDLE_VALUE)    {        AfxMessageBox("打开命名管道失败");    }    else    {            char bRead[128];            DWORD dwRead;            if (ReadFile(hClient,bRead,128,&dwRead,NULL))            {               AfxMessageBox("读取管道信息成功");               string s=bRead;               return s;            }            else            {               AfxMessageBox("读取管道信息失败");            }                    CloseHandle(hClient);//close pipe    }}

dllmain里面调用
C/C++ code
string ss=ClientPipe();char MyHookPath[128];sprintf(MyHookPath,"%s",ss);MessageBox(NULL,MyHookPath,"当前路径",MB_OK);

这样得到的路径要么NULL,要么乱码。恳请各位大神解答。万分感谢
如果有不用管道的方法,有用别的方法的,请各位大哥给个思路,谢谢

[解决办法]
sprintf(MyHookPath,"%s",ss);先试试改正这句吧
[解决办法]
server里, pipe关闭的太早了吧
可能client还没读取,就被关闭了。

[解决办法]
探讨

引用:

sprintf(MyHookPath,"%s",ss);先试试改正这句吧
这个要怎么改呢?

热点排行