• Delphi 开发so库,Delphi 调用SO库


    inux桌面系统:Deepin20

    一.编写SO库
    新建一个项目

    项目右键Add Linux Platform

    然后项目就变为.so

     添加代码

    library mySO;
     
    uses
      System.SysUtils,
      System.Classes;
     
    {$R *.res}
    function testStr: TStringList; cdecl;
    var
      str: string;
      strlist: TStringList;
    begin
      strlist := TStringList.Create;
      strlist.Add('hello');
      strlist.Add('world');
      result := strlist;
    end;
     
    function testInt(i: Integer): Integer; cdecl;
    begin
      Inc(i);
      result := i;
    end;
     
     
    exports
      testInt,
      testStr;
     
     
    begin
     
    end.

    编译,生成.so文件

     二.调用SO库
    新建项目

     右键Add Linux Platform,然后将so库添加到项目中

    添加代码

    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.Controls.Presentation, FMX.StdCtrls,System.IOUtils, FMX.ScrollBox,
      FMX.Memo;
     
    type
      TForm1 = class(TForm)
        btn1: TButton;
        btn2: TButton;
        mmo1: TMemo;
        procedure btn1Click(Sender: TObject);
        procedure btn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
     
     
    var
      Form1: TForm1;
     
      testInt:function (i: Integer): Integer;cdecl;
      testStr:function : TStringList;cdecl;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm1.btn1Click(Sender: TObject);
    var
      Handle1:NativeInt;
      i:integer;
      sl:TStringList;
    begin
      mmo1.Lines.Add(TPath.GetLibraryPath+'libmySO.so');
     
      Handle1:=LoadLibrary(PWideChar('libmySO.so'));
      mmo1.Lines.Add(IntToStr(Handle1));
      if Handle1<>0 then
      begin
        @testInt:=GetProcAddress(Handle1,'testInt');
        @testStr:=GetProcAddress(Handle1,'testStr');
     
        if Assigned(testInt) then
        begin
          i:=testInt(1000);
          mmo1.Lines.Add(IntToStr(i));
        end
        else
        begin
          mmo1.Lines.Add('nil');
        end;
     
        sl:=testStr;
        mmo1.Lines.AddStrings(sl);
     
        FreeLibrary(Handle1);
      end;
    end;
     
    procedure TForm1.btn2Click(Sender: TObject);
    begin
      Application.Terminate;
    end;
     
    end.
     F9 运行,结果如下

    源码下载https://download.csdn.net/download/zhanglu_king/20464265
    ————————————————
    版权声明:本文为CSDN博主「小米很好吃」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zhanglu_king/article/details/119085973

  • 相关阅读:
    HTML、ASP.NET、XML、Javascript、DIV+CSS、JQuery、AJax的起源与简介
    【使用python写一段代码将pdf文件转换为word文件】
    【自学开发之旅】基于Flask的web开发(一)
    基于高斯混合模型的分布拟合与参数估计:高维复数域的详细推导
    面试并发篇
    支持向量机
    【华为OD机试python】比赛【2023 B卷|100分】
    苹果电脑专业的条形码工具iBarcoder:助力高效条形码生成,提升工作效率
    C#语言:散修笔记
    【python】pytorch包(第四章)手写数字图像识别
  • 原文地址:https://blog.csdn.net/tjsoft/article/details/133854797