zoukankan      html  css  js  c++  java
  • 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;
    

      

     

  • 相关阅读:
    swift 设置图片动画组 iOS11之前 默认图片 设置不成功
    iOS 管理库 Carthage 安装以及使用
    OC 和 swift 冒泡排序
    swift中UITextView的使用
    图片拉伸
    swift
    label文字从左上角开始
    2017最新总结CocoaPods安装细节及遇到的问题
    苹果 重置APPID密保问题及更新开发者协议
    xcode
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11290716.html
Copyright © 2011-2022 走看看