微軟HoloLens調用C++ DLL封裝可以嗎?
2019/7/20??????點(diǎn)擊:
一、C++ Dll基礎了解
動(dòng)態(tài)鏈接庫(dll)比較好的介紹在孫鑫《VC++深入詳解》第十九章動(dòng)態(tài)鏈接庫中有詳細介紹。主要涉及以下問(wèn)題:
1.靜態(tài)鏈接庫與動(dòng)態(tài)鏈接庫的區別
①靜態(tài)鏈接庫編譯的時(shí)候加載;
②動(dòng)態(tài)鏈接庫運行的時(shí)候加載。
2.dll的顯式調用和隱式調用
①dll隱式加載:需要.h,.lib,.dll文件
①dll顯式加載:只需要.dll文件
3.dll名字改編問(wèn)題
4.動(dòng)態(tài)鏈接庫導出類(lèi)與導出函數
SCR5逆運動(dòng)算法C++ DLL封裝,具體是導出類(lèi)還是導出函數,根據導出類(lèi)與函數的區別:
導出類(lèi)的優(yōu)點(diǎn):類(lèi)可繼承,層次清晰、完整;
導出類(lèi)的缺點(diǎn):不能被其他語(yǔ)言調用,封裝性不好。
導出函數的優(yōu)點(diǎn):可以被其他語(yǔ)言調用,封裝性好;
導出函數的缺點(diǎn):層次混亂。
考慮到dll需要被其他語(yǔ)言調用,需要在Unity和AR眼鏡中被調用,故而以導出函數的方式封裝。
二、算法C++ DLL封裝
1.打開(kāi)VS打開(kāi)VS2015,創(chuàng )建一個(gè)Win32項目,命名為Ikine_analyze_dll
2.添加Ikine_analyze_dll.h和Ikine_analyze_dll.cpp文件
3.在Ikine_analyze_dll.h中編寫(xiě)逆運動(dòng)算法函數接口,并添加dll名字改編
4.在Ikine_analyze_dll.cpp中編寫(xiě)逆運動(dòng)算法函數實(shí)現
5.配置Debug或者Release以及平臺X86和X64
5.點(diǎn)擊生成->生成解決方案,于是創(chuàng )建完成dll.
三、win32控制臺中使用方法
采用dll隱式調用方法調用dll。
1.創(chuàng )建win32控制臺程序Test
2.將Ikine_analyze_dll.h和Ikine_analyze_dll.lib文件拷貝到工程目錄下
3.添加.h包含目錄和lib庫目錄
4.添加附加依賴(lài)項Ikine_analyze_dll.lib
5.編寫(xiě)main代碼,其中若添加#pragmacomment(lib,"Ikine_analyze_dll.lib"),則不需要進(jìn)行3和4的包含及庫目錄配置
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測試腳本如下,注意需要:
①u(mài)sing System.Runtime.InteropServices;
②使用[DllImport("Dll名字")]指明要引用的DLL,然后聲明要使用的DLL中的方法。
3.運行unity,測試是否調用成功
可看出debug.log的數值與WIN32控制臺運行的結果完全一致,同時(shí)機器人姿態(tài)也是正確的,說(shuō)明在PC上unity中調用逆運動(dòng)C++ dll算法成功返回數值。
五、AR眼睛中使用問(wèn)題
1.將unity的程序燒寫(xiě)到HoloLensAR眼鏡中,運行時(shí)候發(fā)現機器人姿態(tài)與數值與unity中運行的結果和數值完全不同。
2.返回unity中,將調用dll Ikine_RPY的這句函數注釋掉
int i=Ikine_RPY( T_rpy, JointVelo, Psi_UserDefined, Psi_Optimal, Joint, Psi_Desired);
3.運行unity,發(fā)現數值和姿態(tài)與AR眼鏡中相同。說(shuō)明AR眼鏡并沒(méi)有調用到C++dll文件。
4.為了判斷是否是C++dll編寫(xiě)錯誤,寫(xiě)了簡(jiǎn)單的c++ 返回a+b的測試試驗,結果結論與以上完全相同,在PC unity中可以運行并正確取值,在A(yíng)R眼鏡中運行毫無(wú)結果。故而斷定AR眼鏡中不支持C++ dll的調用。查看unity中調用的dll,發(fā)現全是c#類(lèi)庫的dll。
六、AR眼鏡是否支持C#封裝的dll測試
1.創(chuàng )建C#類(lèi)庫,.net framework版本不要高于3.5
2.修改文件名稱(chēng)并編寫(xiě)測試代碼
3.生成->生成解決方案,找到dll
4.在unity中測試a+b的返回結果
5.在A(yíng)R中測試a+b的返回結果,與PC上unity的返回結果一致。說(shuō)明AR眼鏡可調用C#類(lèi)庫dll.
七、總結
1.PC上unity可調用C++ DLL以及C#類(lèi)庫DLL;
動(dòng)態(tài)鏈接庫(dll)比較好的介紹在孫鑫《VC++深入詳解》第十九章動(dòng)態(tài)鏈接庫中有詳細介紹。主要涉及以下問(wèn)題:
1.靜態(tài)鏈接庫與動(dòng)態(tài)鏈接庫的區別
①靜態(tài)鏈接庫編譯的時(shí)候加載;
②動(dòng)態(tài)鏈接庫運行的時(shí)候加載。
2.dll的顯式調用和隱式調用
①dll隱式加載:需要.h,.lib,.dll文件
①dll顯式加載:只需要.dll文件
3.dll名字改編問(wèn)題
4.動(dòng)態(tài)鏈接庫導出類(lèi)與導出函數
SCR5逆運動(dòng)算法C++ DLL封裝,具體是導出類(lèi)還是導出函數,根據導出類(lèi)與函數的區別:
導出類(lèi)的優(yōu)點(diǎn):類(lèi)可繼承,層次清晰、完整;
導出類(lèi)的缺點(diǎn):不能被其他語(yǔ)言調用,封裝性不好。
導出函數的優(yōu)點(diǎn):可以被其他語(yǔ)言調用,封裝性好;
導出函數的缺點(diǎn):層次混亂。
考慮到dll需要被其他語(yǔ)言調用,需要在Unity和AR眼鏡中被調用,故而以導出函數的方式封裝。
二、算法C++ DLL封裝
1.打開(kāi)VS打開(kāi)VS2015,創(chuàng )建一個(gè)Win32項目,命名為Ikine_analyze_dll
2.添加Ikine_analyze_dll.h和Ikine_analyze_dll.cpp文件
3.在Ikine_analyze_dll.h中編寫(xiě)逆運動(dòng)算法函數接口,并添加dll名字改編
4.在Ikine_analyze_dll.cpp中編寫(xiě)逆運動(dòng)算法函數實(shí)現
5.配置Debug或者Release以及平臺X86和X64
5.點(diǎn)擊生成->生成解決方案,于是創(chuàng )建完成dll.
三、win32控制臺中使用方法
采用dll隱式調用方法調用dll。
1.創(chuàng )建win32控制臺程序Test
2.將Ikine_analyze_dll.h和Ikine_analyze_dll.lib文件拷貝到工程目錄下
3.添加.h包含目錄和lib庫目錄
4.添加附加依賴(lài)項Ikine_analyze_dll.lib
5.編寫(xiě)main代碼,其中若添加#pragmacomment(lib,"Ikine_analyze_dll.lib"),則不需要進(jìn)行3和4的包含及庫目錄配置
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測試腳本如下,注意需要:
①u(mài)sing System.Runtime.InteropServices;
②使用[DllImport("Dll名字")]指明要引用的DLL,然后聲明要使用的DLL中的方法。
3.運行unity,測試是否調用成功
可看出debug.log的數值與WIN32控制臺運行的結果完全一致,同時(shí)機器人姿態(tài)也是正確的,說(shuō)明在PC上unity中調用逆運動(dòng)C++ dll算法成功返回數值。
五、AR眼睛中使用問(wèn)題
1.將unity的程序燒寫(xiě)到HoloLensAR眼鏡中,運行時(shí)候發(fā)現機器人姿態(tài)與數值與unity中運行的結果和數值完全不同。
2.返回unity中,將調用dll Ikine_RPY的這句函數注釋掉
int i=Ikine_RPY( T_rpy, JointVelo, Psi_UserDefined, Psi_Optimal, Joint, Psi_Desired);
3.運行unity,發(fā)現數值和姿態(tài)與AR眼鏡中相同。說(shuō)明AR眼鏡并沒(méi)有調用到C++dll文件。
4.為了判斷是否是C++dll編寫(xiě)錯誤,寫(xiě)了簡(jiǎn)單的c++ 返回a+b的測試試驗,結果結論與以上完全相同,在PC unity中可以運行并正確取值,在A(yíng)R眼鏡中運行毫無(wú)結果。故而斷定AR眼鏡中不支持C++ dll的調用。查看unity中調用的dll,發(fā)現全是c#類(lèi)庫的dll。
六、AR眼鏡是否支持C#封裝的dll測試
1.創(chuàng )建C#類(lèi)庫,.net framework版本不要高于3.5
2.修改文件名稱(chēng)并編寫(xiě)測試代碼
3.生成->生成解決方案,找到dll
4.在unity中測試a+b的返回結果
5.在A(yíng)R中測試a+b的返回結果,與PC上unity的返回結果一致。說(shuō)明AR眼鏡可調用C#類(lèi)庫dll.
七、總結
1.PC上unity可調用C++ DLL以及C#類(lèi)庫DLL;
2.AR眼鏡 HoloLens不支持調用C++ DLL,但是支持調用C#類(lèi)庫DLL。
- 上一篇:UNITY3D動(dòng)畫(huà)模型的MESH COLLODER準確碰撞檢 2019/8/8
- 下一篇:Intel RealSense D435i深度相機開(kāi)發(fā)基礎 2019/7/2