一个间接办法,你可用一个"共享名"申请一块共享内存块,进行读写: * w8 O0 s0 `- j" n8 Z* r
HANDLE GetShare(char * &ShareP,int size,char *ShareName) ) D6 q" i: K9 ?" R" Y' Y8 S# w0 I4 q. Q+ V
{ . p4 Y- `- ^. v6 m8 x8 S8 X
//ShareP申请的内存块地址,size字节数,ShareName共享名 ]" F: d+ _/ i- M" K( `' z
HANDLE fh=CreateFileMapping((HANDLE)-1,0,PAGE_READWRITE,0,Size,ShareName);
R# T, {+ _& B6 hShareP=(char *)MapViewOfFile(fh,FILE_MAP_ALL_ACCESS,0,0,0); j; i& z. Y y" ~% c2 r
if(GetLastError()!=ERROR_ALREADY_EXISTS) 8 ?' Z' f, M, @, J
ZeroMemory(ShareP,size); // 共享区初始化
7 l! y! g* X% S) Creturn(fh); 2 ^2 @, I+ ?+ h+ u! M
}
0 G$ ~' d; m5 h1 v" dchar * ShareP=NULL;
9 A l) ~* c/ d/ G* S2 f, [void test() // 申请一块128个字节的字符数组
% T' h c T- x{ ; i, T, H$ L7 ^4 G
HANDLE fh=GetShare(ShareP,128,"ShareForMyProg"); $ N) T3 |, ]: ~$ k7 e" v% [! y6 k
for (int i=0;i<128;i++)
3 J: b2 f8 B- z: s0 M6 k3 O8 RShareP=i;
+ @( v G7 U% b7 e& BCloseHandle(fh);
( J* @1 c6 w. ]3 b# z% }8 k} 6 u% G4 k, E* S, h, e
如果你的多个程序之间或同一个程序多次同时运行,也可借助这个办法进变量通讯;你的若干个进程可借助于这种办法互相传递数据。 |