可以让一个进程读写另一个进程中的变量吗? Sorry, 共享内存只能在Unix/Linux类系统上实现。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 实际上有很多种方法实现进程间通信。如,Clipboard, COM, DDE, File Mapping, MailSlots, Pipes, RPC, Sockets, WM_COPYDATA等。 不可能的,除非你使用其他的办法来使另外一个进程做些事情,比如使用进程间通讯的机制、COM、OLE、等其他什么的! win 下是有共享内存的 查查函数 CreateFileMapping 一点问题都没有!!!用WriteProcessMemory和ReadProcessMemory。不要说变量,代码都没问题。。 对呀对呀!否则fpe是怎么做的?呵呵。 用管道?太繁,不如用WM_COPYDATA,个人以为最简单。 shared_memory.h ...#ifndef _WIN_SYSTEM_SHARED_MEMORY_H_#define _WIN_SYSTEM_SHARED_MEMORY_H_#ifndef _WIN_SYSTEM_DEFS_H_#include "system_defs.h"#endif //_WIN_SYSTEM_DEFS_H__SYSTEM_BEGINclass shared_memory_t{public: shared_memory_t(); ~shared_memory_t(); bool_t open(const char *pm_name, uint32_t pm_size); void close(); inline LPVOID base(); inline uint32_t size() const;protected: HANDLE i_mapview; LPVOID i_base; uint32_t i_size;};inline LPVOID shared_memory_t::base(){ return i_base;}inline uint32_t shared_memory_t::size() const{ return i_size;}_SYSTEM_END#endif // _WIN_SYSTEM_SHARED_MEMORY_H_shared_memory.cpp ...#ifndef _WIN_SYSTEM_SHARED_MEMORY_H_#include "shared_memory.h"#endif // _WIN_SYSTEM_SHARED_MEMORY_H__SYSTEM_BEGIN#define _SYS_SHMEM_MEMFILEPREFIX "isdom_system_sharedmemory_%s"shared_memory_t::shared_memory_t(): i_mapview(NULL), i_base(NULL), i_size(0){}shared_memory_t::~shared_memory_t(){ close();}bool_t shared_memory_t::open(const char *pm_name, uint32_t pm_size){ if ( i_mapview ) return _false; char szName[_MAX_PATH]; sprintf(szName, _SYS_SHMEM_MEMFILEPREFIX, pm_name); i_mapview = CreateFileMapping(NULL, NULL, PAGE_READWRITE, 0, pm_size, szName); if ( i_mapview ) { i_base = MapViewOfFile(i_mapview, FILE_MAP_ALL_ACCESS, 0, 0, 0); i_size = pm_size; } return ( i_mapview && i_base );}void shared_memory_t::close(){ if (i_base) { UnmapViewOfFile(i_base); i_base = NULL; i_size = 0; } if (i_mapview) { CloseHandle(i_mapview); i_mapview = NULL; }}_SYSTEM_END 当然可以的!定义全局变量如下:#pragma data_seg("Shared")LONG g_lShared = 0; //注意一定要初始化。#pragma data_seg这个全局变量是相同实例共享的。不同进程共享数据可以用内存映射文件实现。 喂、喂,以上各位,人家的意思是被讀寫的進程可不是自已寫的,你們都給些進程間通訊的例子有什麼用。應該說,讀寫另一個未知進程唯一的方法是:ReadprocessMemeory/WriteProcessMemory 建议用文件内存影象的方法,这是比较好的方法,由于本人没用过,不敢多说,你可以看看windows 核心编程那本书 完成端口接收不到客户端数据原因 连接SQL SERVER 2003的问题 用钩子禁止系统的复制功能该怎么做? debug assertion failed!!!! 急 大家进来看看 安装VC++6后出现问题 在线等!!! 如何弹出FrameWnd但不让他活动 抢其他窗体的焦点 80里加急 这个现象好奇怪!关于winsocket 高手帮忙看看这段代码的问题? VC6.0出现了个奇怪的问题,请大家帮我看看! ****给MSDN做个指南如何?**** 请问VC下怎么控制一个tcp/ip的包头
Clipboard, COM, DDE, File Mapping, MailSlots, Pipes, RPC, Sockets, WM_COPYDATA等。
除非你使用其他的办法来使另外一个进程做些事情,
比如使用进程间通讯的机制、COM、OLE、等其他什么的!
用WriteProcessMemory和ReadProcessMemory。
不要说变量,代码都没问题。。
shared_memory.h ...#ifndef _WIN_SYSTEM_SHARED_MEMORY_H_
#define _WIN_SYSTEM_SHARED_MEMORY_H_#ifndef _WIN_SYSTEM_DEFS_H_
#include "system_defs.h"
#endif //_WIN_SYSTEM_DEFS_H__SYSTEM_BEGINclass shared_memory_t
{
public:
shared_memory_t();
~shared_memory_t(); bool_t open(const char *pm_name, uint32_t pm_size);
void close(); inline LPVOID base();
inline uint32_t size() const;protected:
HANDLE i_mapview;
LPVOID i_base;
uint32_t i_size;
};inline LPVOID shared_memory_t::base()
{
return i_base;
}inline uint32_t shared_memory_t::size() const
{
return i_size;
}_SYSTEM_END#endif // _WIN_SYSTEM_SHARED_MEMORY_H_
shared_memory.cpp ...#ifndef _WIN_SYSTEM_SHARED_MEMORY_H_
#include "shared_memory.h"
#endif // _WIN_SYSTEM_SHARED_MEMORY_H__SYSTEM_BEGIN#define _SYS_SHMEM_MEMFILEPREFIX "isdom_system_sharedmemory_%s"shared_memory_t::shared_memory_t()
: i_mapview(NULL), i_base(NULL), i_size(0)
{}shared_memory_t::~shared_memory_t()
{
close();
}bool_t shared_memory_t::open(const char *pm_name, uint32_t pm_size)
{
if ( i_mapview )
return _false; char szName[_MAX_PATH];
sprintf(szName, _SYS_SHMEM_MEMFILEPREFIX, pm_name);
i_mapview = CreateFileMapping(NULL, NULL, PAGE_READWRITE, 0, pm_size, szName);
if ( i_mapview )
{
i_base = MapViewOfFile(i_mapview, FILE_MAP_ALL_ACCESS, 0, 0, 0);
i_size = pm_size;
}
return ( i_mapview && i_base );
}void shared_memory_t::close()
{
if (i_base)
{
UnmapViewOfFile(i_base);
i_base = NULL;
i_size = 0;
}
if (i_mapview)
{
CloseHandle(i_mapview);
i_mapview = NULL;
}
}_SYSTEM_END
定义全局变量如下:
#pragma data_seg("Shared")
LONG g_lShared = 0; //注意一定要初始化。
#pragma data_seg这个全局变量是相同实例共享的。不同进程共享数据可以用内存映射文件实现。
應該說,讀寫另一個未知進程唯一的方法是:ReadprocessMemeory/WriteProcessMemory