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;
    

      

     

  • 相关阅读:
    STM32 HAL库 +freeRTOS+Keil 移植
    C# OPENGL DEMO 旋转彩色立方体OpenGL, SharpGL
    常用的user32说明
    C# emgu 多模板匹配
    c#操作Excel模板,替换命名单元格或关键字形成报表
    STM32 USB 鼠标+键盘 串口控制
    USB鼠标键盘数据格式以及按键键值
    C# Emgu 类型转换
    C#来操作Word
    Linux部署H2
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/11290716.html
Copyright © 2011-2022 走看看