我创建了一个在不同应用程序之间共享内存的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 ++项目使用的是UnicodeMulti-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'}

09-10 04:07