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