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