最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

在UE中引用第三方庫

2023-09-09 15:11 作者:Nilzen  | 我要投稿

創(chuàng)建包含第三方庫的插件

官方推薦的方法是通過第三方庫插件插件模板進行集成。

通過插件模板創(chuàng)建之後,我們會得到一個包含二個Module的Plugin目錄,其中一個是與Plugin同名的主模塊;另一個則是用來引用第三方庫的包裝模塊。這個包裝模塊和普通模塊一樣,具有最基本的三個文件ModuleName.cpp,ModuleName.h以及ModuleName.Build.cs。這種做法比較乾凈地對第三方庫進行了隔離。模板創(chuàng)建的示例模塊中清晰地標明了,這種模塊的類型需要被設(shè)置為ModuleType.External,如果在插件的主模塊中直接引用第三方庫,使用這種類型標識,會出現(xiàn)一個編譯錯誤:`XXX is not a C++ module (referenced via default plugins → XXX.uplugin)`。

在插件中引用第三方庫需要完成以下事務(wù)

1. 將第三方庫的頭文件和庫文件導入到Plugin中的子目錄下 。

2. 向UBT聲明第三方庫的頭文件路徑。

3. 向UBT聲明第三方庫的lib文件的完整路徑(含文件名)。

4. 向UBT聲明運行時需要加載的第三方庫的dll文件的完整路徑(含文件名),如果我們使用的第三方庫只需要靜態(tài)鏈接lib,那麼,這一步就不需要執(zhí)行了。

5. 如果第三方庫運行時需要加載對應(yīng)的dll,也就是上面第4步指定的dll,那麼,則需要在與插件同名的主模塊的StartupModule函數(shù)中獲取dll的句柄。

具體步驟操作

導入第三方庫的文件

首先,在插件的Source目錄下,新建一個ThirdParty目錄,這裏面新建一個用於包裝第三方庫的類型為External的模塊。根據(jù)實際需要,也可以創(chuàng)建多個模塊來包裝不同的第三方庫。第三方庫通常沒有源碼,他們會提供頭文件、靜態(tài)庫(.lib、.a)或者動態(tài)庫(.dll、.dylib、.so),或者二者皆有。把第三方庫的目錄複製到與包裝模塊的Build.cs同級的位置,以freetype和opencv爲例,會得到以下的目錄結(jié)構(gòu):


聲明第三方庫的Include路徑

還是以freetype和opencv爲例,在包裝模塊的`Build.cs`文件,也就是`ThirdPartyWrapper.Build.cs`中添加以下內(nèi)容:

? ModuleDirectory是Build.cs所在的目錄。P.S. 需要依賴System.IO程序集。

聲明第三方庫的lib文件名及路徑

如果第三方庫提供了靜態(tài)庫,靜態(tài)庫的鏈接是在編譯期完成的,因此,這部分工作需要通過Build.cs完成。核心方法是PublicAdditionalLibraries,這個函數(shù)會向UBT聲明編譯時依賴的靜態(tài)鏈接庫的完整路徑。在包裝模塊的ThirdPartyWrapper.Build.cs文件的構(gòu)造函數(shù)尾部添加:

通常,爲了區(qū)分不同平臺,代碼會寫成下面這個樣子:

聲明運行時依賴的dll文件及其路徑

這一步操作的核心方法是RuntimeDependencies,添加運行時依賴的動態(tài)鏈接庫的完整路徑。這裏需要注意的是dll必須首先複製到插件的Binaries目錄下。通過RuntimeDependencies的聲明,UnrealEditor打包時才會將dll打包到相應(yīng)的目錄中。

還是在ThirdPartyWrapper.Build.cs文件的構(gòu)造函數(shù)的相同位置繼續(xù)添加:

同時,還可以通過PublicDelayLoadDLLs,指定哪些運行時依賴的DLL可以延遲加載。比如:

完成之後,我們會得到如下代碼:

運行時加載動態(tài)庫

在插件的默認模塊啓動時,加載dll,類似代碼:

接下來就可以通過這個句柄來使用dll中的函數(shù)了。

記得要在模塊的ShutdownModule函數(shù)中釋放這個句柄資源:

在加載代碼中使用了IPluginManager查找dll的路徑,這個接口屬於Projects模塊,因此,Build.cs中需要添加依賴關(guān)係:

參考

官方文檔:https://docs.unrealengine.com/5.1/zh-CN/integrating-third-party-libraries-into-unreal-engine/

社區(qū)經(jīng)驗:https://segmentfault.com/a/1190000008210614

在UE中引用第三方庫的評論 (共 條)

分享到微博請遵守國家法律
贞丰县| 六盘水市| 于都县| 迭部县| 固原市| 旬邑县| 神木县| 景洪市| 休宁县| 陇川县| 崇义县| 九龙城区| 隆德县| 泰宁县| 延吉市| 成武县| 丹东市| 子长县| 湖南省| 巢湖市| 新竹县| 尖扎县| 永靖县| 遂宁市| 新河县| 丹东市| 银川市| 黄大仙区| 大宁县| 平塘县| 介休市| 黎城县| 名山县| 北京市| 论坛| 颍上县| 简阳市| 伊吾县| 微山县| 河间市| 津市市|