gpt4 book ai didi

C++ 命名管道 WriteFileEx/ReadFile, unicode/ansi

转载 作者:行者123 更新时间:2023-11-28 06:43:49 32 4
gpt4 key购买 nike

我正在尝试使用命名管道和重叠 I/O 将数据从 x64 应用程序传递到 x86 应用程序,就像此处定义的那样:

http://msdn.microsoft.com/en-us/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);

最佳答案

ReadFile 调用中 _meshes 的类型是什么?如果它是一个指针,您将读入指针,而不是被指向的数据:

&_meshes

应该是:

_meshes

此外,您似乎正在编写特定于进程的 HANDLEOVERLAPPED 信息。你是想写那些吗?

您需要添加更多代码以获得更好的帮助。

关于C++ 命名管道 WriteFileEx/ReadFile, unicode/ansi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25418380/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com