Delphi 示例:
//创建内存映射
//读取内存映射
//创建内存映射
var
str,strA,strB,FA,FB:string;
pstr:pchar;
pp:^pansichar;
hma,hmb:THandle;
begin
self.WindowState:=wsmaximized;
//创建及拷贝数据到共享文件
strA:='AA193';
strB:='193';
str:='4';
str:=str+'/'+'CHIM TEST';
str:=str+','+'Provider=SQLOLEDB.1;Password=lovechina;Persist Security Info=True;User ID=admin;Initial Catalog=xydb;Data Source=183.63.22.38;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=USER-20150919VW;';
str:=str+'Use Encryption for Data=False;Tag with column collation when possible=False';
FA:='xyz2055coimasp20';
FB:='coimasp20';
strA:=strA+' '+str;
strB:=strB+' '+str;
hma := CreateFileMapping($FFFFFFFF, nil, page_ReadWrite, 0, 100, PCHAR(FA));
//拷贝数据到共享文件里。
pstr:=pchar(strA);
pp := MapViewOfFile(hma, File_Map_All_Access, 0, 0, 0);
copymemory(pp,pstr,strlen(pstr));
pp:=@pstr;
hmb := CreateFileMapping($FFFFFFFF, nil, page_ReadWrite, 0, 100, PCHAR(FB));
//拷贝数据到共享文件里。
pstr:=pchar(strB);
pp := MapViewOfFile(hmb, File_Map_All_Access, 0, 0, 0);
copymemory(pp,pstr,strlen(pstr));
pp:=@pstr;
end;
//读取内存映射
function App_Init(AdoConn: TADoConnection): boolean; //为程序启动设置各种参数
var
ZAppName: array[0..127] of char;
s,title_name,data_name: string;
Found: HWND;
vprog: pchar;
begin
try
result := false;
hMapFile := CreateFileMapping($FFFFFFFF, nil, page_ReadWrite, 0, 100, 'xyz2055coimasp20');
MapFilePointer := MapViewOfFile(hMapFile, File_Map_All_Access, 0, 0, 0);
S := PChar(MapFilePointer);
//showmessage(s);
rkey73 := copy(S,1,pos(' ',s)-1);
user_ptr := trim(copy(S, 3, pos(' ', s) - 3));
vprev := trim(copy(S, pos(' ', s) + 1, 1));
data_name:=copy(S, pos('/', s) + 1, pos(',', s)-pos('/', s)-1);
db_ptr := trim(copy(S, pos(',', s) + 1, length(s) - pos(',', s)));
if trim(db_ptr) = '' then exit;
title_name := application.Title+' '+data_name;
application.Title := 'OnlyOne' + IntToStr(HInstance);
vprog := pchar(title_name);
strpcopy(ZAppName, vprog);
Found := FindWindow(nil, ZAppName);
if Found <> 0 then
begin
ShowWindow(Found, SW_SHOWMINIMIZED);
ShowWindow(Found, SW_SHOWNORMAL);
application.Terminate;
end;
application.Title := title_name;
AdoConn.Connected := false;
AdoConn.ConnectionString := db_ptr;
AdoConn.Connected := true;
result := true;
except
result := false;
end;
end;
function App_init_2(AdoConn: TADoConnection): boolean;
var
ZAppName: array[0..127] of char;
s,title_name,data_name: string;
Found: HWND;
vprog: pchar;
begin
try
result := true;
hMapFile := CreateFileMapping($FFFFFFFF, nil, page_ReadWrite, 0, 100, 'coimasp20');
MapFilePointer := MapViewOfFile(hMapFile, File_Map_All_Access, 0, 0, 0);
S := PChar(MapFilePointer);
showmessage(s);
rkey73 := copy(S,1,pos(' ',s)-1);
vprev := copy(S, pos(' ', s) + 1, 1);
data_name:=copy(S, pos('/', s) + 1, pos(',', s)-pos('/', s)-1);
db_ptr := trim(copy(S, pos(',', s) + 1, length(s) - pos(',', s)));
if trim(db_ptr) = '' then
begin
result := false;
exit;
end;
title_name := application.Title+' '+data_name;
application.Title := 'OnlyOne' + IntToStr(HInstance);
vprog := pchar(title_name);
strpcopy(ZAppName, vprog);
Found := FindWindow(nil, ZAppName);
if Found <> 0 then
begin
ShowWindow(Found, SW_SHOWMINIMIZED);
ShowWindow(Found, SW_SHOWNORMAL);
application.Terminate;
end;
application.Title := title_name;
AdoConn.Connected := false;
AdoConn.ConnectionString := db_ptr;
AdoConn.Connected := true;
except
result := false;
end;
end;