CreateMutex and OpenMutex return NULL
CreateMutex and OpenMutex return NULL
我正在编写一个具有共享内存的应用程序,并在名称上创建具有适当"Local"
前缀的命名互斥体。然而,每次我调用CreateMutex
函数来创建句柄时,我都会得到一个NULL
返回值。我甚至尝试调用OpenMutex
之后,得到一个NULL
返回。
GetLastError()
函数返回6
,即ERROR_INVALID_HANDLE
。我相信在任何进程中第一次尝试创建这个命名互斥时都会发生这种情况。在包括一些MFC组件后,我包括了windows.h
,并在应用程序的其他地方使用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);
}
来自MSDN文档中的CreateMutex:
如果lpName匹配现有事件、信号量、可等待定时器、作业或文件映射对象的名称,则函数失败,GetLastError函数返回ERROR_INVALID_HANDLE。这是因为这些对象共享相同的命名空间。
尝试使用WinObj查看是否有同名的非互斥对象
CreateMutex()
以LPCTSTR
作为最后一个参数。这是一个宏,如果定义了UNICODE
,则为LPCWSTR
,否则为LPCSTR
。然而,你正在传递一个指针到char
字符串。如果你的程序是用UNICODE
定义编译的,这可能会导致问题。
试试下面的代码,看看它是否改变了什么:
d_mutex_to_h = CreateMutex(NULL, FALSE, _T("your_mutex_name_here"));
相关文章:
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- C++函数中的精确"return"矩
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 检查字符串是否"null" C++
- 方法错误"not all control paths return a value"和方法不返回值
- fopen 在 gdb 中返回 NULL
- Marshal.PtrToStructure on Android return null
- Getter return null C++
- C++ base64_decode() return null
- 返回 NULL,但收到错误 C2440:'return':无法从'int'转换为'const &'
- CreateMutex and OpenMutex return NULL
- return NULL value