DELPHI开发LINUX包

Posted hnxxcxg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DELPHI开发LINUX包相关的知识,希望对你有一定的参考价值。

DELPHI开发LINUX包

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

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

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

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

不论加载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 MSWINDOWSSysErrorMessage(GetLastError)$ENDIF MSWINDOWS
       $IFDEF POSIXDLErrorMsg$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;

  

 

以上是关于DELPHI开发LINUX包的主要内容,如果未能解决你的问题,请参考以下文章

DELPHI开发LINUX的动态库

delphi可以用于linux下的编程吗?

用于包/组件开发的 Delphi 环境设置

如何用DELPHI进行开发?

Delphi for windows和linux

使用delphi 10.2 开发linux 上的Daemon