UE4--用外掛載入第三方庫lib/dll(lsl)
背景:
用UE4進行外掛開發,需要引用到第三方庫LSL。
解決歷程:
對於一個UE4純新手以及C++6年沒碰的我的來說,簡直就是在虐待我的頭髮,哎。遇到的第一個問題是怎麼在我的外掛裡面引用到這個第三方庫,網上查了很多資料,大多不是很理解,最終還是看了這篇文章才終於把專案在VS中跑通,在這裡十分感謝作者。(https://blog.csdn.net/qq_36409711/article/details/82112867)
但是,VS跑通了UE4的專案卻跑不起來了,報錯是說我的外掛無法載入成功,可能是系統錯誤或者外掛配置錯誤。然後我又薅了一個多小時的頭髮低效的在網上翻了一圈還是沒有任何思路,搞得我都有點自暴自棄了。沒有任何思路的我只能碰運氣,於是我又去新建了一個第三方庫外掛去看它的程式碼以及引用方式,發現在ThirdParty中的XXX.build.cs檔案裡比我在上面那篇文章看的多了兩行程式碼。
// Delay-load the DLL, so we can load it from the right place first
PublicDelayLoadDLLs.Add("ExampleLibrary.dll");
// Ensure that the DLL is staged along with the executable
RuntimeDependencies.Add("$(PluginDir)/Binaries/ThirdParty/t1Library/Win64/ExampleLibrary.dll");
我抱著試一試的心態在自己的外掛.Build.cs中也把這兩行加上,但我還是不放心又仿照它dll和lib的存放路徑將lsl.dll與lsl.lib放到一個資料夾下,再到外掛的/Binaries/Win64中放了一個lsl.dll,最後把PublicDelayLoadDLLs.Add("ExampleLibrary.dll");這句程式碼中dll的地址參考之前載入lsl.lib地址的方式改了一下,然後嘗試編譯。VS正常通過了沒有問題,開啟專案,發現神奇的不報錯了這讓我很開心,以為我終於成功了(雖然不知道哪一行程式碼起了效果,也沒弄明白原理,但是先這樣吧)。
PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "include"));
PublicAdditionalLibraries.Add(Path.Combine(ThirdPartyPath, "lib", "lsl.lib"));
PublicDelayLoadDLLs.Add(Path.Combine(ThirdPartyPath, "lib", "lsl.dll"));
RuntimeDependencies.Add("$(PluginDir)/Binaries/Win64/lsl.dll");
然而,事情並沒有結束,我呼叫自己寫的測試方法時直接導致UE4崩潰,我人都傻了!一分析錯誤日誌是 0x00007ffd85b2a388 KERNELBASE.dll!UnknownFunction [] 也就是說,程式專案都通過了,但還是找不對對應的方法,啊!!!!我可憐的頭髮!到這裡已經沒什麼資料可以翻的了(自以為),UE4引用LSL本就沒有什麼文章可以看,就連C++的都沒找到一篇(可能是沒去外網找,或者找錯了地方,而且UE4還是魔改C++),到這我也沒轍了,我就盲猜!
我想到我下載下來的liblsl壓縮包中include資料夾裡除了lsl_c.h的標頭檔案之外還有一個lsl的資料夾,裡面的標頭檔案中有包括我測試方法裡要呼叫的那個方法lsl_create_streaminfo,我就在想是不是因為這些標頭檔案不在同一級目錄下導致方法找不到,抱著試一試的態度我lsl資料夾裡的標頭檔案全部複製了出來,放到了lsl_c.h的同級目錄下,然後再試。結果測試方法終於跑通啦!我的頭髮終於不用再受到虐待了!
最終結果:
完全就是一臉懵逼的成功引用了第三方庫lsl,以及掉了一地的頭髮!當然我這種搞法只是成功呼叫,後續打包應該還會出現問題而且寫法也應該不是最簡潔的,堪堪能用而已,但我還是決定記錄下來併發出去,也許也能幫到和我同樣的新手。
相關文章
- aspnetcore外掛開發dll熱載入NetCore
- aspnetcore外掛開發dll熱載入 二NetCore
- Prism 目錄方式載入外掛,提示`xxx.resources.dll`找不到
- (原創)[C#] MEF 主程式與外掛載入不同版本的DLLC#
- VS載入lib庫的三種方法
- OctoberCMS 外掛 第三方登入
- DLL動態庫動態載入
- Obsidian第三方外掛下載
- antd圖示庫按需載入的外掛實現
- win10外掛字幕srt怎麼載入_win10外掛字幕srt如何載入Win10
- Vue第三方庫與外掛實戰手冊Vue
- 學習筆記479—解決obsidian無法載入第三方外掛筆記
- gitbook 入門教程之實用外掛(新增3個外掛)Git
- framework外掛化技術-類載入Framework
- cad載入外掛快捷鍵命令 cad安裝外掛的快捷鍵
- vue載入第三方圖示庫(轉載)Vue
- 一種優雅的Golang的庫外掛註冊載入機制Golang
- 封裝動態庫dll與靜態庫lib(原理及簡單例項)封裝單例
- VS如何將核心函式封裝成dll、lib,並供給第三方呼叫?函式封裝
- win10無法載入java外掛怎麼辦_win10無法載入java外掛解決方法Win10Java
- Vue外掛開發初體驗——(懶載入)Vue
- Vue圖片懶載入之lazyload外掛使用Vue
- webpack loader—自己寫一個按需載入外掛Web
- VSCode For Web 深入淺出 -- 外掛載入機制VSCodeWeb
- Mac Sublime Text 載入 Vue 語法高亮外掛MacVue
- 使用 Webapck 優化 VS Code 外掛載入效能Web優化
- [外掛擴充套件]qq登入外掛套件
- 谷歌外掛下載谷歌
- iOS開原始碼集合 和 各種實用第三方庫以及 XCode輔助外掛整理iOS原始碼XCode
- Vue px自動換算 外掛 postcss-pxtorem lib-flexibleVueCSSREMFlex
- 使用Visual Studio 2022 建立lib和dll並使用
- Chrome外掛入門Chrome
- 外掛化之程式碼呼叫與載入資源
- Vue實現一個圖片懶載入外掛Vue
- chrome好用外掛和第三方工具Chrome
- tampermonkey外掛指令碼油猴外掛下載 - 篡改猴瀏覽器外掛指令碼瀏覽器
- Windows環境下,.lib匯入庫 詳解Windows
- dlopen開發外掛庫