• 微軟HoloLens調用C++ DLL封裝可以嗎?

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

    2.AR眼鏡 HoloLens不支(zhī)持調(diào)用C++ DLL,但是支持調用(yòng)C#類庫DLL。


    网站地图 正能量网-传播正能量弘扬主旋律-免费正能量网站www正能量-免费正能量网站www正能量下载在线观看官网