参数"Global \\ MyMapping"的CreateFileMapping问题

-2 c++ winapi

我在Win 7上使用delphi管理员权限,而在创建命名共享内存时,我遇到了一个奇怪的错误.

 hMapFile = CreateFileMapping(
             INVALID_HANDLE_VALUE,    // use paging file
             NULL,                    // default security
             PAGE_READWRITE,          // read/write access
             0,                       // maximum object size (high-order DWORD)
             256,                // maximum object size (low-order DWORD)
             "Global\\\MyMapping");                 // name of mapping object
Run Code Online (Sandbox Code Playgroud)

当我使用"Global \\ MyMapping"它不起作用,我得到一个错误消息 无法创建文件映射对象(5).

但是,当我使用"Global\MyMapping"时,它运行正常.

问题:当使用"Global\MyMapping"时,Delphi(Borland)给出错误消息的具体原因是什么?

但是"\\"和"\"的问题不会来使用CreateMutex吗?

Createmutex适用于以下两种情况:

第一个案例代码:

TCHAR szName1[]=TEXT("Global\\\NameOfMutexObject");
Mutex=CreateMutex(NULL,FALSE,szName1);               
Run Code Online (Sandbox Code Playgroud)

第二个案例代码:

TCHAR szName1[]=TEXT("Global\NameOfMutexObject");
Mutex=CreateMutex(NULL,FALSE,szName1);               
Run Code Online (Sandbox Code Playgroud)

此致,Navneet

Ond*_*lle 5

它记录了两者CreateFileMappingCreateFileMutex:

该名称可以具有"Global"或"Local"前缀,以在全局或会话命名空间中显式创建对象.名称的其余部分可以包含除反斜杠字符(\)之外的任何字符.

你的CreateMutex例子不是Delphi而是C,它使用反斜杠作为转义字符.他们创建的名称(在Delphi符号)互斥'Global\'#10'ameOfMutexObject''Global'#10'ameOfMutexObject'分别.(序列\n在C中解释为换行符,在Delphi表示法中为#10.)

Delphi不使用反斜杠作为转义字符,所以你应该使用非转义文字'Global\NameOfMutexObject'.