DELPHI开发LINUX包
发布时间:2020-12-15 09:10:38 所属栏目:大数据 来源:网络整理
导读:DELPHI开发LINUX包 我们知道,有了包的存在,开发插件架构的程序,才成为可能 。 DELPHI在WINDOWS里面的包的扩展名是.bpl。 在LINUX里面的包的扩展名是.o。 怎样在LINUX里面加载.o的包? 不论加载WINDOWS的包,还是加载LINUX的包,都是使用LoadPackage()函数
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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |