openni框架是一套开源的SDK,用于开发3D传感器的中间层和应用层。

各个传感器需要实现OniDriverAPI.h中定义的接口,具体实现在OpenNI2/Source/Drivers目录下,不同传感器编译成不同的动态库。

openni::initialize()用于加载各个传感器的动态库,并获得动态库接口的地址。上层调用最终是调用到传感器的动态库中。

下面简单看下initialize的过程:

1.解析OpenNI.ini
2.OpenNI.ini的Drivers;Repository指定目录下的所有传感器动态库都实现了一组相同的接口(定义在OniDriverAPI.h)。
对每一个传感器动态库,dlopen打开,获得动态库句柄,dlsym获得接口地址,创建DriverHandler维护这组接口。

下图是应用层Device::open()的过程:

用到的几个系统函数说明:

1.int dladdr(void *address, Dl_info *dlip)
确定address是否位于构成进程的地址空间的其中一个加载模块(可执行库或共享库)内,如果指定的address在其中一个加载模块的范围内,则Dl_info的结构成员由dladdr()设置。
struct{
const char *dli_fname;
void *dli_fbase;
const char *dli_sname;
void *dli_saddr;
size_t dli_size; /* ELF only */
int dli_bind; /* ELF only */
int dli_type;
};
dli_fname:一个指针,指向包含address的加载模块的文件名。每次调用dladdr() 后,该内存位置的内容都可能发生更改。

2.void* dlopen( const char * pathname, int mode);
打开一个动态链接库,并返回动态链接库的句柄。

3.void*dlsym(void*handle,constchar*symbol)
根据动态链接库句柄与符号,返回符号对应的地址,可以获取函数地址也可以获取变量地址。

openni2结构简介相关推荐

  1. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图 ...

  2. Laravel 文件夹结构简介

    表 1.1:Laravel 文件夹结构简介 文件夹名称 简介 app 应用程序的业务逻辑代码存放文件夹 app/Console 存放自定义 Artisian 命令文件 app/Http/Control ...

  3. ORACLE内存结构简介

    ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大.我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握.我们会着重从理论基础体系角度再逐步到实战应用.实际上,如果 ...

  4. java获取tomcat目录结构_tomcat目录结构简介_动力节点Java学院整理

    tomcat目录结构简介 如果我们有一个web应用,名称为"mail"(同时也是web应用所在目录的名称),那么其目录内不同类型的文件应该服从如下放置的规则: 一般来讲: 对于ht ...

  5. html文档基本结构由哪三对,第3章 网页制作及HTML语言基本结构简介.ppt

    第三章 网页制作与HTML语言基本结构简介 本章提要 静态网页与动态网页 Dreamweaver MX制作网页 HTML语言的基本结构 3.1网页制作概述 3.1.1静态网页与动态网页 1.静态网页 ...

  6. 转:硬盘结构简介的好文(转)---MBR、分区表、CHS等概念

    最近学FreeBSD的时候,在分区方面遇到一些疑问,顺便就了解了一下主分区,逻辑分区,以及磁盘存储的一些概念,发现了一篇好文章,在此转载 一.系统引导过程简介 系统引导过程主要由以下几个步骤组成(以硬 ...

  7. UE4-目录结构简介

    UE4-目录结构简介 Time: 2020年10月15日17:16:30 Author: Yblackd UE4-目录结构简介 1. 关联账户 2. 通用目录 4. 引擎特有的目录 5. 游戏项目目录 ...

  8. FPGA原理和结构简介

    FPGA原理和结构简介 一.FPGA在芯片体系中的地位 我们生活中丰富多彩的应用程序是通过计算机底层大量的数字逻辑运算实现的,而处理这些数字逻辑运算的芯片我们称为数字芯片,常见的处理器如CPU,GPU ...

  9. html语言简介 ppt,网页制作与HTML语言基本结构简介.ppt

    网页制作与HTML语言基本结构简介.ppt 第三章网页制作与HTML语言基本结构简介 本章提要静态网页与动态网页DreamweaverMX制作网页HTML语言的基本结构 3 1网页制作概述 3 1 1 ...

最新文章

  1. Android实训案例(七)——四大组件之中的一个Service初步了解,实现通话录音功能,抽调接口...
  2. 【Mysql优化】索引覆盖
  3. 达摩院里的女Leader,一面温柔似水一面灿烂如阳
  4. 当 Swagger 遇上 Torna,瞬间高大上了!
  5. android中Canvas使用drawBitmap绘制图片
  6. 下一个互联网平台还有多远?
  7. UVA12169模运算
  8. android mvvm_Android MVVM设计模式
  9. Python面向对象中的“私有化”
  10. 记录学习算法心得(时间复杂度和空间复杂度)
  11. oracle 自动化运维--自动搭建oracle dataguard 运维工具(开发源代码)
  12. 游戏界面设计艺术性的思考
  13. android+主流品牌手机,10大手机品牌共建Android联军 代表机型一览
  14. js 3d地球飞机环绕飞行动画js特效
  15. Unity Failed to resolve project template:Failed to decompress
  16. 三代16S多样性文献导读
  17. 计算机应用模块等级考试大纲,全国计算机等级考试大纲 年版.doc
  18. 第1章 沉沦在大学里——《逆袭大学》连载
  19. 微信小程序 - 获取屏幕的大小
  20. 在中国在行其道的智慧城市,为何折戟多伦多

热门文章

  1. Crash 工具使用
  2. CARLA 学习笔记1:CARLA简介
  3. python记忆式键入,在Python编程模式下输入命令”print(100+200)“执行的结果是()
  4. mybatis执行流程
  5. C++ Reference: Standard C++ Library reference: C Library: cstdio: stdout
  6. SpringBoot + Sharding JDBC 读写分离、分库分表
  7. java生成excel并输出到浏览器下载
  8. MonoRail和WebForm,谁是瑞士军刀
  9. C++ 拓扑排序(AOV网络)
  10. 利用虚拟机配置SDN网络实验平台(virtual box+Ubuntu+jdk配置+mininet+floodlight/openDaylight)