我在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
它记录了两者CreateFileMapping和CreateFileMutex:
该名称可以具有"Global"或"Local"前缀,以在全局或会话命名空间中显式创建对象.名称的其余部分可以包含除反斜杠字符(\)之外的任何字符.
你的CreateMutex例子不是Delphi而是C,它使用反斜杠作为转义字符.他们创建的名称(在Delphi符号)互斥'Global\'#10'ameOfMutexObject'和'Global'#10'ameOfMutexObject'分别.(序列\n在C中解释为换行符,在Delphi表示法中为#10.)
Delphi不使用反斜杠作为转义字符,所以你应该使用非转义文字'Global\NameOfMutexObject'.