Unreal Engine 4:如何使用动态库和静态库

本文详细介绍了在Unreal Engine中集成第三方动态库和静态库的方法。动态库集成包括使用LinkingDlls方案,通过获取dll句柄和方法指针调用dll方法,以及调用dll中的类。静态库集成则直接在*.Build.cs文件中添加定义、lib文件和头文件路径。文章提供了具体的代码示例和步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在开发中经常要用到第三方库,下面将使用第三方库的方法总结一下。

一、动态库的添加

UnrealEngine的wiki中提供了一种方案:
Linking Dlls:https://wiki.unrealengine.com/Linking_Dlls

dll中的代码:
https://github.com/XenoEgger/CreateAndLinkDLLTutSol/blob/master/CreateAndLinkDLLTut/CreateAndLinkDLLFile.h
https://github.com/XenoEgger/CreateAndLinkDLLTutSol/blob/master/CreateAndLinkDLLTut/CreateAndLinkDLLFile.cpp

调用dll的代码:
https://github.com/XenoEgger/CreateAndLinkDLLProj/blob/master/Source/CreateAndLinkDLLProj/Public/CreateAndLinkDLLTutBFL.h
https://github.com/XenoEgger/CreateAndLinkDLLProj/blob/master/Source/CreateAndLinkDLLProj/Private/CreateAndLinkDLLTutBFL.cpp

        上述方案主要是使用如下两个函数,先获取dll文件句柄,再通过dll句柄获取方法指针,最后通过获取的方法指针调用dll中的方法:

FPlatformProcess::GetDllHandle(dllFilePath);
FPlatformProcess::GetDllExport(dllHandle, procName);

        如果只需要调用dll的方法的话,采用上述方案是没有问题的,但如果调用dll中的类的话,上述方案就不合适了。下面就来说说如何调用dll中的类:

比如,将crypto++7和log4cplus-2.0.2编译成dll后生成如下文件:

crypto++7.lib
crypto++7.dll
log4cplus-2.0.2.lib
log4cplus-2.0.2.dll

crypto++7.lib和log4cplus-2.0.2.lib分别为crypto++7和log4cplus-2.0.2的导出库。

将它们放入工程目录下/Plugins/ThirdParty/Debug中,在*.Build.cs文件中添加如下代码:

Definitions.AddRange(new string[] {"CRYPTOPP_IMPORTS", "LOG4CPLUS_BUILD_DLL" });

// 第三方库debug目录
string ThirdPartyPath = Path.Combine(PluginsPath, "ThirdParty/Debug");
PublicLibraryPaths.Add(ThirdPartyPath);

// 添加.lib文件
PublicAdditionalLibraries.Add("crypto++7.lib");
PublicAdditionalLibraries.Add("log4cplus-2.0.2.lib");

PublicIncludePaths.AddRange(new string[] {
    Path.Combine(PluginsPath, "cryptopp-CRYPTOPP_7_0_0/include"),
    Path.Combine(PluginsPath, "log4cplus-2.0.2/include"),
});

其中,CRYPTOPP_IMPORTS和LOG4CPLUS_BUILD_DLL分别为crypto++7和log4cplus-2.0.2的导入参数;PublicAdditionalLibraries中分别添加了crypto++7和log4cplus-2.0.2的导出库.lib文件;PublicIncludePaths分别添加了crypto++7和log4cplus-2.0.2的头文件路径。

同时crypto++7.dll和log4cplus-2.0.2.dll必须放到Binaries/Win64目录下。

二、静态库的添加

方式跟动态库类似,比如,将asio-1.11.0和msgpack-c-cpp-3.1.1编译成静态库后生成如下文件:

asio-1.11.0.lib
msgpack-c-cpp-3.1.1.lib

asio-1.11.0.lib和msgpack-c-cpp-3.1.1.lib都是静态库,不是导出库。

将它们放入工程目录下/Plugins/ThirdParty/Debug中,在*.Build.cs文件中添加如下代码:

Definitions.AddRange(new string[] { "ASIO_STANDALONE", "MSGPACK_USE_CPP03" });

// 第三方库debug目录
string ThirdPartyPath = Path.Combine(PluginsPath, "ThirdParty/Debug");
PublicLibraryPaths.Add(ThirdPartyPath);

// 添加.lib文件
PublicAdditionalLibraries.Add("asio-1.11.0.lib");
PublicAdditionalLibraries.Add("msgpack-c-cpp-3.1.1.lib");

PublicIncludePaths.AddRange(new string[] {
	Path.Combine(PluginsPath, "asio-1.11.0/include"),
	Path.Combine(PluginsPath, "msgpack-c-cpp-3.1.1/include"),
});

其中,ASIO_STANDALONE和MSGPACK_USE_CPP03分别为asio-1.11.0和msgpack-c-cpp-3.1.1在编译时要用到的参数;PublicAdditionalLibraries中分别添加了asio-1.11.0和msgpack-c-cpp-3.1.1的静态库.lib文件;PublicIncludePaths分别添加了asio-1.11.0和msgpack-c-cpp-3.1.1的头文件路径。

 

参考文档:

Linking Dlls
Linking Static Libraries Using The Build System
How to Link External C Libraries .dll .lib With Your Project & Package With Game, Fast And Easy

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值