国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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中引用第三方庫的評論 (共 條)

分享到微博請遵守國家法律
三门峡市| 乌海市| 彩票| 洪湖市| 石泉县| 乐业县| 江山市| 峡江县| 合阳县| 武鸣县| 安多县| 巧家县| 平阴县| 灯塔市| 呈贡县| 抚州市| 西吉县| 成安县| 上杭县| 鄂伦春自治旗| 宽城| 诸暨市| 广南县| 蓬溪县| 吉安市| 华亭县| 崇信县| 宁南县| 香河县| 七台河市| 龙井市| 布尔津县| 牙克石市| 辉县市| 绥德县| 鹤壁市| 临海市| 阿克| 广丰县| 墨竹工卡县| 科技|