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