最近写一个项目应用qt与python通过共享内存通信,刚开始接触python没找到进程间信号量该怎么使用,最终采用c++将信号量封装成dll,由qt和python调用(windows平台下),在打包运行的时候遇到qt 载入dll失败的情况。将dll创建过程记录一下:
#include <stdio.h>
#include <Windows.h>
char m_cMutexName[30];
void* m_pMutex = nullptr;
extern "C" {
__declspec(dllexport) void createSem(const char* name);
__declspec(dllexport) void closeSem();
__declspec(dllexport) bool Lock();
__declspec(dllexport) bool UnLock();
}
void createSem(const char* name)
{
memset(m_cMutexName, 0, sizeof(m_cMutexName));
int min = strlen(name) > (sizeof(m_cMutexName) - 1) ? (sizeof(m_cMutexName) - 1) : strlen(name);
strncpy(m_cMutexName, name, min);
m_pMutex = CreateMutex(NULL, false, (LPCSTR)m_cMutexName);
}
void closeSem()
{
CloseHandle(m_pMutex);
m_pMutex = nullptr;
}
bool Lock()
{
//互斥锁创建失败
if (NULL == m_pMutex)
{
return false;
}
DWORD nRet = WaitForSingleObject(m_pMutex, INFINITE);
if (nRet != WAIT_OBJECT_0)
{
return false;
}
return true;
}
bool UnLock()
{
return ReleaseMutex(m_pMutex);
}
编辑属性将输出项设置为dll:
设置 优化:已禁用,全局序优化:否。否则会报错 error D8016: “/ZI”和“/GL”命令行选项不兼容