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;

  

 

最新文章

  1. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
  2. Android 代码监控apk安装,卸载,替换
  3. javascript 笔记(1)
  4. Swift - 控制流/控制结构说明(if,switch,for,while)
  5. 【转载】__name__ == "__main__": 你认识我么?
  6. 【性能】web提升性能的小总结
  7. 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍
  8. Django 路由系统(URLconf)
  9. 三分钟了解Go语言的前世今生
  10. js 动态调用字符串方法并传入对应参数
  11. Redis 系列之CentOS下Redis的安装
  12. Django日志系统
  13. linux之vim配置及使用示例
  14. 使用 TXT 文本存储
  15. GlusterFS实战
  16. Style、ControlTemplate 和 DataTemplate 触发器
  17. Linux执行YUM命令报错解决方案
  18. 52.RocketMQ 事务
  19. torch 深度学习(3)
  20. Windows SDK 非模态对话框的消息处理

热门文章

  1. java常用集合框架关系
  2. jenkens docker启动
  3. Linux网卡上添加多个IP
  4. (critical) chassis-frontend.c:122: Failed to get log directory, please set by --log-path
  5. 用python实现数据库查询数据方法
  6. TLS 1.3 中Pre_shared_key和key_share对应的两种密钥交换模式
  7. springboot 使用常用注解
  8. 一个97年测试妹纸的成长经历,转正直接涨薪2K
  9. 基于k8s集群部署prometheus监控ingress nginx
  10. Mayor's posters (离散化线段树+对lazy的理解)