c++ - CreateFileMapping() 名称

标签 c++ character-encoding char

我正在创建一个在不同应用程序之间共享内存的 DLL。

创建共享内存的代码如下所示:

#define NAME_SIZE 4
HANDLE hSharedFile;

create(char[NAME_SIZE] name)
{
    hSharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, (LPCSTR)name);
    (...) //Other stuff that maps the view of the file etc.
}

它不起作用。但是,如果我将 name 替换为字符串,它会起作用:

SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, (LPCSTR)"MY_TEST_NAME");

我怎样才能让它与 char 数组一起工作?

我有 java 背景,你会一直使用字符串,什么是 LPCSTR?这是否与我的 MS VC++ 项目使用的是 Unicode 还是 Multi-Byte 字符集有关

最佳答案

我想你应该增加 NAME_SIZE 值。

不要忘记数组必须至少有 number of chars + 1 才能在末尾保存\0 char,这表示行的结尾。

LPCSTR 是一个指针,指向一个以 null 结尾的 8 位 Windows (ANSI) 字符常量字符串,定义如下:

LPCSTR defined as typedef __nullterminated CONST CHAR *LPCSTR; 

例如,即使您有 "Hello world" 常量并且它有 11 个字符,它也会在内存中占用 12 个字节。

如果将字符串常量作为数组传递,则必须在末尾添加 '\0',如 {'T','E','S','T', '\0'}

关于c++ - CreateFileMapping() 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4694012/

相关文章:

java - 使用 Java 中的一组固定字母将 long 编码/解码为字符串

java - 字 rune 字中的字符太多 - 尝试检查我的值是否不在 ASCII 值内 '\0'

c++ - 错误:没有匹配函数来调用‘PSTUNClient::PSTUNClient

c++ - 你能在 C++ 中将一个函数放在另一个函数中吗?

c++ - 关闭应用程序而不显示控制台窗口

html - 当找不到元标记时,我可以给 jsoup 一个后备字符编码吗?

postgresql - UTF8 Postgresql Create Database Like MySQL(包括字符集、编码、lc_type)

c++ - tbb 中 parallel_reduce 的 Reduce 是什么?

c - 为什么这段代码使用 *char 作为缓冲区指针?

c - c中char数组中的空格