欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > winApi与QtApi的共享内存通信

winApi与QtApi的共享内存通信

2025/9/14 19:53:12 来源:https://blog.csdn.net/maokexu123/article/details/141225541  浏览:    关键词:winApi与QtApi的共享内存通信

目的

就是A程序是QT的程序用的QT的接口读取共享内存,B程序是WinApi创建的共享内存,两个程序进行共享内存;
其间还有信号量,信号量,统一用的winApi的信号量。
就是下边这种情况:
在这里插入图片描述

下边的这个例子,就针对两块重点,进行分析:
1、QT侧的共享内存与win Api的共享内存如何共享,直接共享肯定会失败的。
2、共享内存的信号里怎么应用,才能解决,资源的冲突问题,资源的协调问题。

参考资料

https://www.cnblogs.com/lidabo/p/17222887.html

过程

内存挂载不上的问题

就是QT侧进程:

QSharedMemory sharedMemory;
sharedMemory.setKey(QString("memoryKeyForTest"));
用的这个共享内存的key,于是winApi侧的也用这一个key:
const char* shmName = "memoryKeyForTest";HANDLE hMapFile = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, shmName);if (hMapFile == NULL) {std::cerr << "CreateFileMapping failed with error " << GetLastError() << std::endl;return 1;}LPVOID lpBase = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 4096);if (lpBase == NULL) {std::cerr << "MapViewOfFile failed with error " << GetLastError() << std::endl;CloseHandle(hMapFile);return 1;}

发现两个程序总是不能通信,怎么回事,调试跟踪QT代码,发现QT的共享内存总是挂载不上,就是这段代码执行总失败:

 if (!sharedMemory.isAttached()){if(!sharedMemory.attach()){qDebug("program exit!");return -1;}}

那是怎么回事,名字是一样的啊,于是,网上找资料,也没有相关明确的资料,有一个网上说:QT内部对key的名字进行了处理,那如何得到这一个名字呢?不至于,查QT 源码吧?
还是翻翻qt Api的帮

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词