我创建了一个在不同应用程序之间共享内存的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
值。
不要忘记数组必须至少为chars + 1才能在末尾保留\ 0 char,这表明该行的末尾。
LPCSTR是指向8位Windows(ANSI)字符的以null终止的常量字符串的指针,其定义如下:
LPCSTR defined as typedef __nullterminated CONST CHAR *LPCSTR;
例如,即使您具有
"Hello world"
常量并且它包含11个字符,它也将占用12个字节的内存。如果将字符串常量作为数组传递,则必须在末尾添加“ \ 0”,例如
{'T','E','S','T', '\0'}