我正在尝试使用命名管道和重叠的I / O将数据从x64应用程序传递到x86应用程序,如下所示:
http://msdn.microsoft.com/zh-CN/library/windows/desktop/aa365603(v=vs.85).aspx
我的服务器应用程序对WriteFileEx的调用成功,并且我正在通过管道发送的结构似乎还可以,但是,当我在客户端调用ReadFile时,我检索到的数据结构已损坏或与我发送的数据不同,但它也可以成功读取。
我的客户端应用程序具有Unicode字符集,而服务器的字符集为“未设置”,我假设默认值为多字节。我无法将服务器的字符集更改为unicode。
数据损坏仅仅是因为检索/读取数据结构后需要在客户端上将多字节字符转换为宽字符吗?如果是的话,是否有内置的辅助函数可以调用呢?
发送的数据结构(在服务器和客户端上定义相同):
typedef struct
{
int id;
float vertices[VERTICES_COUNT][VERTICES_COMPONENTS];
unsigned short indices[INDICES_COUNT];
float texCoords[TEXTURE_COORD_COUNT][TEXTURE_COORD_COMPONENT];
unsigned char texData[TEXTURE_SIZE];
} MESHINST, *LPMESHINST;
typedef struct
{
OVERLAPPED oOverlap;
HANDLE pipeInst;
int addedCount;
MESHINST meshes[MESH_GROUP_BUFFER];
int removedCount;
int removed[MESH_REMOVE_BUFFER];
} MESHGROUPINST, *LPMESHGROUPINST;
服务器上的WriteFileEx调用:
LPMESHGROUPINST meshes = (LPMESHGROUPINST)lpOverLap;
fWrite = WriteFileEx(
meshes->pipeInst,
(wchar_t*)meshes,
sizeof(MESHGROUPINST),
(LPOVERLAPPED)meshes,
(LPOVERLAPPED_COMPLETION_ROUTINE)CompletedWriteRoutine);
客户端上的ReadFile调用:
(在标题中)
MESHGROUPINST _meshes;
(以cpp为单位)
do
{
_success = ReadFile(
_pipe,
(wchar_t*)&_meshes,
sizeof(MESHGROUPINST),
&_numOfBytesRead,
NULL);
} while (!_success);
是什么类型_meshes
的ReadFile
电话吗?如果是指针,您将读入指针,而不是指向的数据:
&_meshes
应该:
_meshes
此外,它看起来就像你正在编写过程中,具体HANDLE
和OVERLAPPED
信息。你是想写那些吗?
您需要添加更多代码以获得更好的帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句