• DELPHI开发LINUX包


    DELPHI开发LINUX包

    我们知道,有了包的存在,开发插件架构的程序,才成为可能 。

    DELPHI在WINDOWS里面的包的扩展名是.bpl。

    在LINUX里面的包的扩展名是.so。

    怎样在LINUX里面加载.so的包?

    不论加载WINDOWS的包,还是加载LINUX的包,都是使用LoadPackage()函数加载。

    function LoadPackage(const Name: string; AValidatePackage: TValidatePackageProc): HMODULE;
    {$IFDEF POSIX}
    var
      DLErrorMsg: string;
      M: TMarshaller;
    {$ENDIF POSIX}
    begin
    {$IFDEF MSWINDOWS}
      Result := SafeLoadLibrary(Name);
    {$ENDIF MSWINDOWS}
    {$IFDEF POSIX}
      Result := HMODULE(dlopen(M.AsAnsi(Name, CP_UTF8).ToPointer, PkgLoadingMode));
    {$ENDIF POSIX}
      if Result = 0 then
      begin
    {$IFDEF POSIX}
        DLErrorMsg := string(dlerror);
    {$ENDIF POSIX}
        raise EPackageError.CreateResFmt(@sErrorLoadingPackage,
          [Name,
           {$IFDEF MSWINDOWS}SysErrorMessage(GetLastError){$ENDIF MSWINDOWS}
           {$IFDEF POSIX}DLErrorMsg{$ENDIF POSIX}]);
      end;
      try
        InitializePackage(Result, AValidatePackage);
      except
    {$IFDEF MSWINDOWS}
        FreeLibrary(Result);
    {$ENDIF MSWINDOWS}
    {$IFDEF POSIX}
        dlclose(Result);
    {$ENDIF POSIX}
        raise;
      end;
    end;
    

     

    procedure UnloadPackage(Module: HMODULE);
    begin
      FinalizePackage(Module);
    {$IFDEF MSWINDOWS}
      FreeLibrary(Module);
    {$ENDIF MSWINDOWS}
    {$IFDEF POSIX}
      dlclose(Module);
      InvalidateModuleCache;
    {$ENDIF POSIX}
    end;
    

      

     

  • 相关阅读:
    自动重连脚本
    自动输入用户名密码脚本
    idea 安装及配置
    manjaro安装anaconda
    hive 常用命令
    python built-in zip()
    isinstance(),issubclass()
    python built-in delattr()
    字符串匹配算法
    贪心,分治,回溯,动态规划 4大核心算法思想
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11290716.html
Copyright © 2020-2023  润新知