Delphi 内存映射

 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;  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值