目的
最近工作遇上了64位程序调用32位程序的问题,为什么调用32位程序,因为,客户方只提供了32位的程序,没有办法,只能这样,32位程序,当前也是很通用的程序,只能想办法解决64位程序调用32位的程序。
正式说法是这样:
在64位程序中调用32位的库是不被支持的,因为32位和64位程序在内存寻址、数据结构和调用约定等方面存在根本差异。尝试这样做通常会导致运行时错误或程序崩溃。
直接调用肯定不行,32位程序与64位程序的进程布局、指针长度等都不同,所以两者不能直接调用。
只能走进程间通信的方式,进程间通信,最高效的方式就是共享内存了。
参考网站:
https://zhuanlan.zhihu.com/p/628580121
https://blog.csdn.net/slty_123/article/details/135834828
https://blog.csdn.net/github_37290846/article/details/139243143
情况
公共通信结构
定义通信的数据结构,这里需要注意的是,64位与32位程序的一些数据类型的长度是不样的,因此,我们要用长度定死的那些数据类型,这非常关键,传指针,肯定也不行
#ifndef SHAREDDATA_H
#define SHAREDDATA_H
#include <QMetaType>
#include <QSharedData>
struct SharedData : public QSharedData {
qint32 magicNumber; // 用于验证数据完整性的魔数
qint32 dataSize; // 数据大小(如果需要的话)
// ... 其他数据成员 ...
char data[256]; // 示例数据缓冲区
// 默认构造函数
SharedData() : magicNumber(0x12345678), dataSize(0) {
// 初始化数据...
}
// 静态元类型注册(如果需要的话)
static void registerMetaType() {
qRegisterMetaType<SharedData>("SharedData"