gpt4 book ai didi

c++将值设置为特定地址

转载 作者:行者123 更新时间:2023-11-28 04:17:49 25 4
gpt4 key购买 nike

我想通过将变量值设置为特定地址来在两个程序之间进行数据交换。数据可以分配到地址中,但是当我在一个程序中更改值时,另一个程序仍然无法获取值

Program1.cpp 将值设置为特定地址,Program2.cpp 从该地址获取数据,两者都包含一个头文件“DataExchange.h”

Program1.cpp :

#include <iostream>
#include <windows.h>
#include "DataExchange.h"

using namespace std;

int main(int argc, char** argv) {
double val2 = 0;
double spd = 1;
double* ptr2 = (double*)speed_address;
cout << "Program1" << endl;


while(1){
DXSetvalue (Speed, spd);
val2 = DXGetvalue (Speed);
cout << "[speed] = " << spd++ << " [get speed] = " << val2 << " [address] = " << ptr2 << "\r" ;
Sleep(2000); // 2sec
}

return 0;
}

程序2.cpp:

#include <iostream>
#include <windows.h>
#include "DataExchange.h"

using namespace std;

int main(int argc, char** argv) {

double t = 0;
double val = 0;
int* ptr = (int*)speed_address;
cout << "Program1 Node" <<endl;
init();

while(1){
t += 2;
val = DXGetvalue (Speed);
cout << "(" << t << "sec) " <<"[Speed] = " << val << " [blackboard address] = " << ptr << "\r";
Sleep(2000);
}
}

DataExchange.h:

#include "stdio.h"


// The macro of the value ID
#define Speed 1


// Define of the address of the value
//#define speed_address 0x4a8048
//#define speed_address 0x00CFFB3C
#define speed_address 0x7ffef8

// Declaration
void setaddressValue (double* address, double d);
double getaddressValue (int name);
double* addressID (int name);
void DXSetvalue (int name, double d);
double DXGetvalue (int name);
void init();


// Definition

void setaddressValue (double* address, double d){
double* p = (double*)address;
*p = d;
//printf("p = 0x%x *p = %lf\n", p, *p);
}

double getaddressValue (int name){
double* pGet = addressID(name);
double value = *pGet;
//printf("pGet = 0x%x *pGet = %lf\n", pGet, *pGet);
return value;
}


double* addressID (int name){
switch (name){
case 1:
return (double*)speed_address;
default:
//cout << "not set the address" << endl;
printf("not set the address!!!\n");
}
}


/*program data*/
void DXSetvalue (int name, double d){
setaddressValue(addressID(name), d);
}


double DXGetvalue (int name){
return getaddressValue (name);
}


void init(){
double* p = (double*)speed_address;
*p = 0.5;
}

最佳答案

在内核上运行的程序使用虚拟寻址,这意味着给定程序无法访问另一个程序的地址空间。如果您想促进进程间通信,请考虑使用 Unix 套接字。

关于c++将值设置为特定地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56202220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com