HoloLens开发——C++ DLL封装及在win32、Unity、AR眼镜中调用情况

 

一、C++ Dll基础了解

动态链接库(dll)比较好的介绍在孙鑫《VC++深入详解》第十九章动态链接库中有详细介绍。主要涉及以下问题:

1.静态链接库与动态链接库的区别

https://blog.csdn.net/zang141588761/article/details/50501914

①静态链接库编译的时候加载;

②动态链接库运行的时候加载。

 

2.dll的显式调用和隐式调用

https://blog.csdn.net/sinat_22991367/article/details/73694764

①dll隐式加载:需要.h,.lib,.dll文件

①dll显式加载:只需要.dll文件

 

3.dll名字改编问题

https://blog.csdn.net/aidem_brown/article/details/38712705

 

4.动态链接库导出类与导出函数

https://zhidao.baidu.com/question/941508810337656732.html

SCR5逆运动算法C++ DLL封装,具体是导出类还是导出函数,根据导出类与函数的区别:

导出类的优点:类可继承,层次清晰、完整;

导出类的缺点:不能被其他语言调用,封装性不好。

导出函数的优点:可以被其他语言调用,封装性好;

导出函数的缺点:层次混乱。

 

考虑到dll需要被其他语言调用,需要在Unity和AR眼镜中被调用,故而以导出函数的方式封装。

 

二、算法C++ DLL封装

1.打开VS打开VS2015,创建一个Win32项目,命名为Ikine_analyze_dll

2.添加Ikine_analyze_dll.h和Ikine_analyze_dll.cpp文件

3.在Ikine_analyze_dll.h中编写逆运动算法函数接口,并添加dll名字改编


4.在Ikine_analyze_dll.cpp中编写逆运动算法函数实现


5.配置Debug或者Release以及平台X86和X64

5.点击生成->生成解决方案,于是创建完成dll.


三、win32控制台中使用方法

采用dll隐式调用方法调用dll。

1.创建win32控制台程序Test

2.将Ikine_analyze_dll.h和Ikine_analyze_dll.lib文件拷贝到工程目录下

 

3.添加.h包含目录和lib库目录

4.添加附加依赖项Ikine_analyze_dll.lib

5.编写main代码,其中若添加#pragmacomment(lib,"Ikine_analyze_dll.lib"),则不需要进行34的包含及库目录配置

6.运行程序出现错误

7.将Ikine_analyze_dll.dll文件拷贝到debug或者release文件夹下,再次运行

四、Unity中使用方法

https://blog.csdn.net/wuquanl/article/details/72052207

1. 将x64 release文件夹下生成的Ikine_analyze_dll.dll复制到unity项目Assets\Plugins文件夹

2.在unity添加TestDebug.cs测试脚本如下,注意需要:

using System.Runtime.InteropServices;

②使用[DllImport("Dll名字")]指明要引用的DLL,然后声明要使用的DLL中的方法。

3.运行unity,测试是否调用成功

 

可看出debug.log的数值与WIN32控制台运行的结果完全一致,同时机器人姿态也是正确的,说明在PC上unity中调用逆运动C++ dll算法成功返回数值。

五、AR眼睛中使用问题

1.将unity的程序烧写到HoloLensAR眼镜中,运行时候发现机器人姿态与数值与unity中运行的结果和数值完全不同。

2.返回unity中,将调用dll Ikine_RPY的这句函数注释掉

int i=Ikine_RPY( T_rpy,  JointVelo,  Psi_UserDefined,  Psi_Optimal, Joint,  Psi_Desired);

3.运行unity,发现数值和姿态与AR眼镜中相同。说明AR眼镜并没有调用到C++dll文件。

4.为了判断是否是C++dll编写错误,写了简单的c++ 返回a+b的测试试验,结果结论与以上完全相同,在PC  unity中可以运行并正确取值,在AR眼镜中运行毫无结果。故而断定AR眼镜中不支持C++  dll的调用。查看unity中调用的dll,发现全是c#类库的dll。 

六、AR眼镜是否支持C#封装的dll测试

1.创建C#类库,.net  framework版本不要高于3.5

2.修改文件名称并编写测试代码

3.生成->生成解决方案,找到dll

4.在unity中测试a+b的返回结果

5.在AR中测试a+b的返回结果,与PC上unity的返回结果一致。说明AR眼镜可调用C#类库dll.

七、总结

1.PC上unity可调用C++ DLL以及C#类库DLL;

2.AR眼镜 HoloLens不支持调用C++ DLL,但是支持调用C#类库DLL。

没有更多推荐了,返回首页