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;