• 您的位置:首頁 > 新聞動態 > 技術文章

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

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

    2.AR眼鏡 HoloLens不支持調用C++ DLL,但是支持調用C#類(lèi)庫(kù)DLL。


    AV永久天堂网_奇米狠狠色_亚洲欧美日韩动漫_欧美日韩视频在线观看免费一区二区_日韩精品一二三区_国产AV网站18禁止人_久久久久久精品人妻免费网站不卡_国产最新视频_另类免费视频在线视频二区_久久精品免视国产