C 将值设置为特定地址
c++ set the value to specific address
我想通过将变量值设置为特定地址之间在两个程序之间进行数据交换。数据可以分配到地址中,但是当我更改程序中的一个值时另一个仍然没有得到值
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;
}
program2.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 = %lfn", p, *p);
}
double getaddressValue (int name){
double* pGet = addressID(name);
double value = *pGet;
//printf("pGet = 0x%x *pGet = %lfn", 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 指针设置为地址,但莫名其妙地指出了程序的不同部分中的不同值
- 如何设置指针的内存地址
- 如何在NS3中设置节点的IP地址和数据?
- C 将值设置为特定地址
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 将结构元素地址设置为C 中的null(单链接列表)
- 在C++中设置节点的内存地址
- 定义一个C宏并将内存地址设置为用C和C++编写的结构成员
- 从指针数组的元素传递地址以设置另一个指针地址
- mfc c++通过编辑控件设置另一个应用程序的HWND地址
- 如何将数组中元素的地址设置为指向另一个数组中的特定元素
- 如何将源IP地址设置为0.0.0.0
- 正在将IPv4/IPv6地址和端口设置为sockaddr_storage结构
- 在 Boost ASIO 中,如何设置源 IP 地址以模拟其他服务器的 IP 地址?
- 为什么我不能为我的 QTcpServer 设置特定地址?
- 将指针设置为 nullptr 是否会影响指向同一地址的其他指针
- 在c或c++中,如何区分在内存地址上设置的0和由于该地址未初始化而设置的0
- 设置随机内存地址的值
- 在 Visual Studio 2005 中对取消引用的指针的地址设置数据断点