回 帖 发 新 帖 刷新版面

主题:我想把一个UNICODE字符串写到共享内存中然后再读出来,不知道怎么弄,帮我改一下?

///////////////////////////////////////////
// 我想把一个UNICODE字符串写到共享内存中然后再读出来,不知道怎么弄,帮我改一下?


#include <stdio.h>
#include <string.h>
#include <windows.h>


void main()
{
    char szName[] = "08ShareMem";    // 内存映射对象的名称
    // 下面的这个类型不要修改
    wchar_t szData[] = "这是UNICODE字符";    // 共享内存中的数据
    LPVOID pBuffer;            // 共享内存指针

    // 首先试图打开一个命名的内存映射文件对象
    HANDLE hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);
    if(hMap != NULL)
    {
        // 打开成功,映射对象的一个视图,得到指向共享内存的指针,显示出里面的数据
        pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
        printf(" 读出共享内存数据:“%s”\n", (TCHAR *)pBuffer);
    }
    else
    {
        // 打开失败,创建之
        hMap = ::CreateFileMapping(
            INVALID_HANDLE_VALUE,
            NULL,
            PAGE_READWRITE,
            0,
            128,
            szName);    
        
        // 映射对象的一个视图,得到指向共享内存的指针,设置里面的数据
        pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
        strcpy((TCHAR*)pBuffer, szData);

        printf(" 写入共享内存数据:“%s”\n", (TCHAR*)pBuffer);
    }


    getchar();

    // 解除文件映射,关闭内存映射文件对象句柄
    ::UnmapViewOfFile(pBuffer);
    ::CloseHandle(hMap);

    return;
}

回复列表 (共2个回复)

沙发


    修改如下:
    


 =================================================================================   


#include <stdio.h>
#include <string.h>
#include <windows.h>

#include <locale.h>


void main()
{
    // 内存映射对象的名称
    char szName[] = "08ShareMem"; 

    // 下面的这个类型不要修改
    // 共享内存中的数据
    wchar_t szData[] = L"这是UNICODE字符";  
    
    // 共享内存指针
    LPVOID pBuffer = NULL;            

    // 首先试图打开一个命名的内存映射文件对象
    HANDLE hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);

    if(hMap != NULL)
    {
        // 打开成功,映射对象的一个视图,得到指向共享内存的指针,显示出里面的数据
        pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

        printf(" 读出共享内存数据:“%s”\n", (TCHAR *)pBuffer);
    }
    else
    {
        // 打开失败,创建之
        hMap = ::CreateFileMapping(
            INVALID_HANDLE_VALUE,
            NULL,
            PAGE_READWRITE,
            0,
            128,
            szName);    
        
        // 映射对象的一个视图,得到指向共享内存的指针,设置里面的数据
        pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
       
        //用wcscpy拷贝UNICODE字符串
        wcscpy((wchar_t*)pBuffer, szData);


        //输出UNICODE
        setlocale(0 ,"chs");
        wprintf(L" 写入共享内存数据:“%ls”\n", (wchar_t*)szData);
    
    }


    getchar();

    // 解除文件映射,关闭内存映射文件对象句柄
    ::UnmapViewOfFile(pBuffer);

    ::CloseHandle(hMap);

    return;
}

板凳

上面有一个笔误:把szData改成pBuffer

我来回复

您尚未登录,请登录后再回复。点此登录或注册