CreateMutex 和 OpenMutex 返回 NULL

Ian*_*Ian 3 c++ windows mutex shared-memory

我正在编写一个具有共享内存的应用程序,并且正在创建具有适当"Local\"前缀的命名互斥锁。但是,每次我调用该CreateMutex函数来创建句柄时,都会得到一个NULL返回值。我什至尝试OpenMutex在那之后打电话并获得NULL回报。

GetLastError()函数返回6,这意味着ERROR_INVALID_HANDLE。我相信这发生在第一次尝试在任何进程中创建这个命名的互斥锁时。我windows.h在包含一些 MFC 组件之后包含并且正在CMutex应用程序的其他地方使用;所以我不知道这是否有问题。我总是传递NULL和传递FALSE前两个参数,并且使用的是 Windows XP。

这是我的代码功能的摘要:

char to_name[16] = "Local\\to_1";
d_mutex_to_h = CreateMutex(NULL, FALSE, to_name);

if (d_mutex_to_h == NULL)
{
   d_mutex_to_h = OpenMutex(NULL, FALSE, to_name);
}
Run Code Online (Sandbox Code Playgroud)

bdo*_*lan 7

CreateMutex的 MSDN 文档中:

如果 lpName 与现有事件、信号量、可等待计时器、作业或文件映射对象的名称匹配,则该函数失败并且 GetLastError 函数返回 ERROR_INVALID_HANDLE。这是因为这些对象共享相同的命名空间。

尝试使用WinObj查看是否存在同名的非互斥对象。