欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

同一个进程之间共享变量

程序员文章站 2024-01-25 20:02:22
...

编写程序打开一个exe,希望再打开一个exe时可以得到上一个exe共享的信息


#include<stdio.h>
#include<Windows.h>
// data_seg 之间的数据必须初始化否则会放在其他段中
#pragma data_seg("Shared")
 int apps = 0;
char sharedwnd[100] = "sds";//共享数据
char sharedwnd2[100] = "sds";//共享数据
#pragma data_seg()
 //告诉连接器开关 共享这个变量 RWS   ,R read W Write E execute S shared
#pragma comment(linker,"/SECTION:Shared,RWS")
 int main()
{
	string st1 = sharedwnd;
	st1 += "ss";
	cout << st1 << endl;
	string st2 = sharedwnd2;
	st2 += "ss";
	cout << st2 << endl;
	strncpy(sharedwnd, st1.c_str(), st1.length() + 1);
	strncpy(sharedwnd2, st2.c_str(), st2.length() + 1);
	if (strcmp(sharedwnd , "sdsss")==0) {
		cout << "aaaaa";
	}
	while (1);
    return 0;
}

#pragma data_seg 可以编辑共享变量,

需要注意中间的共享变量定义必须初始化,同时,只支持基本类型,对于string,QString类型不支持,需要进行转换,对共享变量进行重新赋值。

想共享的话 必须开启连接器开关:/SECTION:Shared,RWS,这里的RWS是权限。

string转char[]数组。

strncpy(sharedwnd, st1.c_str(), st1.length() + 1);

char[]数组转Int

int acess=atoi(shared_wnd);

char[]转QString,string,可以直接进行赋值,已经进行了重载

QString s=shared_wnd;
string ss=shared_wnd;

另外char[]数组类型不能直接用==比较大小,需要用strcmp();

相关标签: qt相关开发问题