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

aviDius

我正在尝试使用命名管道和重叠的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);
科里·纳尔逊

是什么类型_meshesReadFile电话吗?如果是指针,您将读入指针,而不是指向的数据:

&_meshes

应该:

_meshes

此外,它看起来就像你正在编写过程中,具体HANDLEOVERLAPPED信息。你是想写那些吗?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将ANSI C字符串转换为UNICODE

来自分类Dev

功能和结构名称的命名约定,并符合ANSI C标准

来自分类Dev

Cancellation of *& in ANSI C

来自分类Dev

取消ANSI C中的*&

来自分类Dev

ANSI C的匿名结构

来自分类Dev

WinAPI Unicode和ANSI函数

来自分类Dev

在C#/ VB中使用Ansi和Windows API结构的Unicode版本的简单方法

来自分类Dev

在C#/ VB中使用Ansi和Windows API结构的Unicode版本的简单方法

来自分类Dev

ANSI C中的接口/实现

来自分类Dev

位域中的枚举-ANSI C

来自分类Dev

为Unicode和ANSI重载toString

来自分类Dev

SetWindowSubclass将ANSI窗口更改为UNICODE

来自分类Dev

创建命名管道C ++ Windows

来自分类Dev

C ++文本文件不会保存为Unicode,而是一直保存为ANSI

来自分类Dev

命名管道:ConnectNamedPipe返回ERROR_BROKEN_PIPE之后的ReadFile

来自分类Dev

从C ++以Unicode形式通过C ++到C#的命名管道后,字符串“ abc”变为“ a \ 0b \ 0c \ 0”

来自分类Dev

C#对象+命名管道+ C ++对象

来自分类Dev

ANSI C中的可变参数宏替代

来自分类Dev

ANSI C的便携式typedef

来自分类Dev

什么是C#中的ansi类?

来自分类Dev

带有Ansi转义的C ++ ctime

来自分类Dev

DateTime解析ANSI C时间戳

来自分类Dev

使用C和Visual Studio 2015的ANSI

来自分类Dev

ANSI C strstr()无法使用指针

来自分类Dev

如何使用Unicode将DOS ANSI(CP 437)文件转换为Unix ANSI?

来自分类Dev

通过c中的命名管道传递数组

来自分类Dev

C-多个分叉孩子的命名管道

来自分类Dev

从命名管道读取的C不会结束

来自分类Dev

C:尝试实现未命名的管道