我现在遇到了这样一个问题。两个进程,Process A需要向Process B发送命令,使其完成不同的功能。然后Process B没执行完一个功能,会向Process A发送结果数据。这样的话,如果采用一个管道,管道里的数据就会有以下几种:
1、字符串:命令都是以字符串传送的,当然也可以是整形。
2、整形:Process B里需要传送这样的数据,当然也可以转换为字符串传送
3、结构体数组或者结构体链表。Process B会向A传送这样的数据。这就不能转换成字符串了。所以,这样的话。管道至少需要传送两种数据类型的数据。如果我采用PIPE_READMODE_MESSAGE这个读模式,一次读一个消息,怎么样才能知道我读到的数据是什么类型的呢?采用ReadFile()的时候,我应该把读到的数据存放在一个什么类型的buffer里呢?再或者大家再给我提点实现这一功能的其他办法吧(最好是解决我的问题,呵呵……),谢谢了...在线等。

解决方案 »

  1.   

    发送的内容可以封一下. 可以简单地定义一个结构体,
    typedef struct ST_TEST
    {
    int nType;
    LPVOID pData;
    }ST_TEST;
    发送的时候就根据你的选择设置 nType的值. pData就是内容.
    接收的时候,先转在这个结构体,再根据nType判断应该是可以的.
    你先测测看.
      

  2.   

    那在ReadFile()的时候,是不是要在
    BOOL WINAPI ReadFile(
      __in          HANDLE hFile,
      __out         LPVOID lpBuffer,
      __in          DWORD nNumberOfBytesToRead,
      __out         LPDWORD lpNumberOfBytesRead,
      __in          LPOVERLAPPED lpOverlapped
    );
    这个结构的lpBuffer强制类型转换成我定义的结构体呢?我先试试。谢谢上面两位的回答啊……
      

  3.   

    现在是这样的情况。
    我按照上面的方法定义了一个结构体,结构体里又有指针,传的是结构体类型数据的地址。
    struct CountResult
    {
    char filename[255];
    int total;
    };
    struct TestPipe 
    {
    int nType;
    char strOrder[20];
    CountResult *file;
    };
    TestPipe test_data;我writefile的时候是写的&test_data,在Process A中能打印nTYpe和strOrder,但就是不能打印file的内容,都是乱码或类似于地址的东西。file我在Process A和Process B中都是先分配内存了的啊。
      

  4.   

    对不起,是我SB了。跨用户进程不能传递指针,可是现在我有的数据要传递链表或者数组,这个数组的长度又是动态指定的。不用CArray,还有其他办法吗?
      

  5.   

    要不要尝试一下,先用管道把地址\数组的长度发到目标进程中去,再用 ReadProcessMemory 读源进程中的内存. 不知道能不能实现?