DELPHI在LINUX平台上提供的开发包有哪些?

更新于
2026-10-04 23:23:13
1阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计235个文字,预计阅读时间需要1分钟。

DELPHI开发Linux包,我们知道,有了包的存在,才能开发插件架构的程序。DELPHI在Windows中的包扩展名为.bpl,而在Linux中的扩展名为.o。如何在Linux中加载.o的包?

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 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;

本文共计235个文字,预计阅读时间需要1分钟。

DELPHI开发Linux包,我们知道,有了包的存在,才能开发插件架构的程序。DELPHI在Windows中的包扩展名为.bpl,而在Linux中的扩展名为.o。如何在Linux中加载.o的包?

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 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;