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包的主要内容,如果未能解决你的问题,请参考以下文章