用内存映射文件共享的变量有办法用普普通通变量一样的方式访问吗

用内存映射文件共享的变量有办法用普通变量一样的方式访问吗?
为了在多个进程间共享变量,我用了内存映射文件:

我定义了一个叫SHAREDVAR的结构:
struct SHAREDVAR
{
int a;
。。。
}
然后定义一个指向这个结构的指针:
SHAREDVAR *S;

然后创建内存映射文件,将指针S指向这一块内存:

hMapShared = CreateFileMapping((HANDLE)-1, NULL, PAGE_READWRITE, 0, sizeof(SHAREDVAR), _T("zywbShared"));
S = (SHAREDVAR *)MapViewOfFile(hMapShared, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(SHAREDVAR));
memset(S, 0, sizeof(SHAREDVAR));

然后使用变量的时候用S->a这样的来使用。

我的问题是:这样使用,前面都要加一个S->,但是前面加个前缀依然不舒服(如果我定义的指针不止一个字母,这个前缀会更长)。有办法直接用 a 这样的方式直接访问内存映射文件中的变量吗?


我的意思就是:我需要内存映射在各个进程中共享的特性,又希望用简短的方式来访问它。如果用我上面说的方式,得把所有共享变量放到一个结构中,然后用结构指针指向那一块共享内存。这样访问起来,前面总要加一个S->的前缀,表达式显得冗长。

我希望没有指针前缀,只用变量名的方式来访问。
------解决思路----------------------
引用:
Quote: 引用:

#define SField(x)  very_long_long_global_pointer_goes_here->x

very_long_long_global_pointer_goes_here->a  = 10;
--> 
SField(a)  = 10;

可是这样还得用SField(a)的方式来访问变量a,和我那种S->a也差不了多少。

我希望的是直接以a来访问。

那是不可能的。