• 您的位(wèi)置:首頁 > 新聞動態 > 技術文章

    微軟HoloLens調用C++ DLL封裝可以(yǐ)嗎?

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

    2.AR眼鏡 HoloLens不支持調用C++ DLL,但是支持調用C#類庫DLL。


    日本中出视频|午夜免费福利在线|亚洲精品亚洲人成在线下载|国产高潮流白浆免费观看不卡|偷拍亚洲欧美|亚洲中文字幕久爱亚洲伊人|久久久久香蕉视频|国产欧美日韩一区|久久国产成人亚洲精品影院老金|久久久久中文字幕