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;
    

      

     

  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11290716.html
Copyright © 2011-2022 走看看