当前位置: 首页 > news >正文

【Delphi 开箱即用 8】多进程之间共享内存的封装单元

多进程之间通信最简单的方式莫过于共享内存。为了满足不同场景下的需求,我直接封装了共享内存单元,方便调用,从而节省大量的开发时间和精力。

需求分析

  1. 跨版本 Delphi 通信
    老项目使用 Delphi 7,新项目使用 Delphi 12,两者需要通过共享内存实现数据通信。

  2. 32 位与 64 位应用程序互通
    在 32 位和 64 位应用程序之间传递数据时,共享内存是一种高效且可靠的解决方案。

  3. Delphi 与其他语言(如 C++)的通信
    当 Delphi 需要与其他编程语言(如 C++)进行数据交互时,共享内存可以作为一种通用的通信方式。

  4. 支持复杂数据类型
    为了满足更灵活的数据互通需求,共享内存单元需要支持共享记录类型(Record)和内存流(Memory Stream),以便处理结构化和非结构化数据。

解决方案

针对上述需求,我们封装了一个通用的共享内存单元,具备以下特点:

  • 跨版本兼容:支持 Delphi 7 到 Delphi 11 的共享内存通信。
  • 跨平台兼容:支持 32 位和 64 位应用程序之间的数据互通。
  • 跨语言支持:提供与其他编程语言(如 C++)的无缝数据交互能力。
  • 灵活数据类型:支持共享记录类型和内存流,满足复杂数据的传输需求。

通过这一封装,开发者可以直接调用共享内存单元,快速实现多进程间的数据通信,显著提升开发效率。有需要该封装单元的可以联系我。

请添加图片描述

调用封装单元代码:

unit Unit3;

interface

uses
  {$IFDEF DELPHI16_UP}
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  Vcl.StdCtrls,
  {$ELSE}
  Windows, Messages, SysUtils, Variants, Classes, Forms, StdCtrls, Controls,
  {$ENDIF}
  uSharedMemoryManager;

type
  TForm3 = class(TForm)
    Memo2: TMemo;
    Memo1: TMemo;
    Button3: TButton;
    Button4: TButton;
    Button1: TButton;
    Button2: TButton;
    Memo3: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FShareMemStreamRec: TShareMemStreamRec;
    FShareMemStreamMgr: TShareMemStreamMgr;
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

// 写入共享文件
procedure TForm3.Button1Click(Sender: TObject);
var
  LStream: TMemoryStream;
begin
  LStream := TMemoryStream.Create;
  try
    LStream.LoadFromFile('Copy.xml');
    FShareMemStreamRec.Token := '9692d7d694d44c9d858fe83317e80c4f';
    FShareMemStreamRec.Description := 'This is Description';
    FShareMemStreamMgr.SetShareMemContent(@FShareMemStreamRec, LStream);
  finally
    LStream.Free;
  end;
end;

// 读出共享文件
procedure TForm3.Button2Click(Sender: TObject);
var
  LStream: TMemoryStream;
begin
  LStream := TMemoryStream.Create();
  try
    FShareMemStreamRec := FShareMemStreamMgr.GetShareMemContent(LStream);
    Memo3.Lines.Add(FShareMemStreamRec.Token);
    Memo3.Lines.Add(FShareMemStreamRec.Description);
    if LStream.Size > 0 then
      LStream.SaveToFile('Paste.xml')
  finally
    LStream.Free;
  end;
end;

// 写入字符串
procedure TForm3.Button3Click(Sender: TObject);
var
  LStream: TStringStream;
begin
  LStream := TStringStream.Create(Memo1.Text);
  try
    FShareMemStreamRec.Token := '9692d7d694d44c9d858fe83317e80c4f';
    FShareMemStreamRec.Description := 'This is Description';
    FShareMemStreamMgr.SetShareMemContent(@FShareMemStreamRec, LStream);
  finally
    LStream.Free;
  end;
end;

// 读出字符串
procedure TForm3.Button4Click(Sender: TObject);
var
  LStream: TStringStream;
begin
  LStream := TStringStream.Create('');
  try
    FShareMemStreamRec := FShareMemStreamMgr.GetShareMemContent(LStream);
    Memo3.Lines.Add(FShareMemStreamRec.Token);
    Memo3.Lines.Add(FShareMemStreamRec.Description);
    if LStream.Size > 0 then
      Memo2.Text := LStream.DataString;
  finally
    LStream.Free;
  end;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  FShareMemStreamMgr := TShareMemStreamMgr.Create;
  FShareMemStreamMgr.SetShareMemName('PM_SM_Clipboard_TT');
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
  FShareMemStreamMgr.Free;
end;

end.

相关文章:

  • Cesium零基础速成教程:一小时入门Cesium
  • 学习springboot 的自动配置原理
  • 电子招采软件系统,如何实现10年可追溯审计
  • 动态内存分配:基于C语言的详细解析与实践
  • LRU(最近最少使用)算法实现
  • java 的标记接口RandomAccess使用方法
  • Visual Studio里的调试(debugging)功能介绍
  • Python第二十二课:元学习 | 学会学习的学习
  • L1-7 统一命名规范(java)
  • C 语 言 --- 二 维 数 组 的 应 用
  • 【Python 语法】排序算法
  • redis部署架构
  • Linux书签上下移动
  • Git LFS (Large File Storage) 简介
  • redis主从搭建
  • 79.HarmonyOS NEXT 手势操作模型详解:移动、缩放与旋转的实现原理
  • 1216走迷宫
  • OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验
  • 接口自动化测试用例
  • 电路基础【2】:三极管基础:PNP与NPN三极管详解
  • 做电商海报的网站/网站seo 优化
  • 网站维护流程图/线上推广平台
  • wordpress推荐管理/seo快速上排名
  • 网站幻灯片效果代码/百度收录提交入口地址
  • 重庆璧山网站制作公司电话/精准营销理论
  • seo搜索营销分析方案/我们seo