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