我现在遇到了这样一个问题。两个进程,Process A需要向Process B发送命令,使其完成不同的功能。然后Process B没执行完一个功能,会向Process A发送结果数据。这样的话,如果采用一个管道,管道里的数据就会有以下几种:
1、字符串:命令都是以字符串传送的,当然也可以是整形。
2、整形:Process B里需要传送这样的数据,当然也可以转换为字符串传送
3、结构体数组或者结构体链表。Process B会向A传送这样的数据。这就不能转换成字符串了。所以,这样的话。管道至少需要传送两种数据类型的数据。如果我采用PIPE_READMODE_MESSAGE这个读模式,一次读一个消息,怎么样才能知道我读到的数据是什么类型的呢?采用ReadFile()的时候,我应该把读到的数据存放在一个什么类型的buffer里呢?再或者大家再给我提点实现这一功能的其他办法吧(最好是解决我的问题,呵呵……),谢谢了...在线等。
1、字符串:命令都是以字符串传送的,当然也可以是整形。
2、整形:Process B里需要传送这样的数据,当然也可以转换为字符串传送
3、结构体数组或者结构体链表。Process B会向A传送这样的数据。这就不能转换成字符串了。所以,这样的话。管道至少需要传送两种数据类型的数据。如果我采用PIPE_READMODE_MESSAGE这个读模式,一次读一个消息,怎么样才能知道我读到的数据是什么类型的呢?采用ReadFile()的时候,我应该把读到的数据存放在一个什么类型的buffer里呢?再或者大家再给我提点实现这一功能的其他办法吧(最好是解决我的问题,呵呵……),谢谢了...在线等。
typedef struct ST_TEST
{
int nType;
LPVOID pData;
}ST_TEST;
发送的时候就根据你的选择设置 nType的值. pData就是内容.
接收的时候,先转在这个结构体,再根据nType判断应该是可以的.
你先测测看.
BOOL WINAPI ReadFile(
__in HANDLE hFile,
__out LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__out LPDWORD lpNumberOfBytesRead,
__in LPOVERLAPPED lpOverlapped
);
这个结构的lpBuffer强制类型转换成我定义的结构体呢?我先试试。谢谢上面两位的回答啊……
我按照上面的方法定义了一个结构体,结构体里又有指针,传的是结构体类型数据的地址。
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中都是先分配内存了的啊。