UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这篇具有很好参考价值的文章主要介绍了UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

完全没接触过C++的插件和DLL,因为MediaPipe需要自己创建插件并编译DLL库,所以把该踩的坑都踩了一遍,几天终于把DLL加载给弄明白了.创作不易,还请点个赞!

参考资料:

封装自己的项目为dll给其他用户使用_哔哩哔哩_bilibili

【UE5】UE项目中静态库还没整明白吧,动态链接库又来了_哔哩哔哩_bilibili

UE4加载使用自定义dll动态链接库_ue4使用动态库_一只菜到家门口的鸡的博客-CSDN博客

【详细全流程】UE4调用第三方库 动态链接库 dll C++_ue4第三方库_虚数魔方的博客-CSDN博客

详解UE4静态库与动态库的导入与使用-腾讯游戏学堂

FPlatformProcess::GetDllExport() returns NULL

Is there a way to suppress c++ name mangling?

下面是踩坑的全部详细过程

1.在UE5创建使用第三方库的插件

打开UE5.1,使用Blank模板,使用C++库,名字命名为MyDemoDLLProject,点击Create

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这里我在右上角File内创建了一个新的空关卡,这样可以方便调试

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这里我使用的是Rider2022,可以查看 Rider for Unreal 初始使用教程

Rider for Unreal 初始使用教程,对于UE4和UE5的C++编写有更强大的支持_哔哩哔哩_bilibili

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

进行项目编译,点击

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

#注意,如果你使用的是VS2019及以上的版本也需要在这里点击Refresh

打开Edit选择Plugins,再点击左上角的ADD

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

在这里选择第三方插件模板,点击创建

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这个时候引擎会弹出示例DLL已经成功加载,现在转到Rider

如果你在上面点击了重新编译就会自动加载Rider,如果没有打开可以在Epic的Library内

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

点击Show in folder,然后双击.sin文件

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

回到正题,现在我们的项目列表应该如下所示

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

现在可以暂时最小化Rider,打开VS创建DLL了

2.使用VS创建DLL

我这里使用的是VS2019

点击创建新项目

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

在搜索栏搜索DLL并选择具有导出功能的DLL

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这里我们使用UE5官方的方式,将我们的DLL创建在插件目录下面

可以参考我的路径

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

点击创建

这是项目的结构

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

在MyDemoDll.h下新增代码

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

extern "C" { MYDEMODLL_API int MyTestAdd(int a , int b); }

右键MyTestAdd,选择快速重构->创建定义

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这个时候会在下面出现一个小窗口用来编写代码,我们修改这里就可以

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

修改后成这样

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

extern "C" { MYDEMODLL_API int MyTestAdd(int a, int b) { return a + b; } }

然后修改DLL编译方式,在上面的框内选择Release和x64

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

右键项目名,选择生成

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

再选择在文件资源管理器中打开

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

双击x64->Release

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

复制MyDemoDll.dll

往回退到Plugins插件目录下,双击Binaries->ThirdParty,在这里创建MyDemoDll文件夹

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

再新建一个Win64,将DLL放在这个目录下

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

完成

3.在插件内连接DLL

来到官方示例的插件目录下,路径是

MyDemoDLLProject\Plugins\MyThirdPartyDemoPlugin\Source\ThirdParty\MyThirdPartyDemoPluginLibrary

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

复制MyThirdPartyDemoPluginLibrary.Build.cs粘贴到MyDemoDll目录下

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

修改文件名MyDemoDll.Build.cs

然后打开MyDemoDll.Build.cs

首先修改了两个class名字,然后将官方示例的lib和dll改成了自己的lib和dll的路径(这一步可以省略,但是为了能够让插件读取到静态库还是做这一步)

// Fill out your copyright notice in the Description page of Project Settings. using System.IO; using UnrealBuildTool; public class MyDemoDll : ModuleRules { public MyDemoDll(ReadOnlyTargetRules Target) : base(Target) { Type = ModuleType.External; if (Target.Platform == UnrealTargetPlatform.Win64) { // Add the import library PublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, "x64", "Release", "MyDemoDll.lib")); // Delay-load the DLL, so we can load it from the right place first PublicDelayLoadDLLs.Add("MyDemoDll.dll"); // Ensure that the DLL is staged along with the executable RuntimeDependencies.Add("$(PluginDir)/Binaries/ThirdParty/MyDemoDll/Win64/MyDemoDll.dll"); } } }

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

回到Rider内,修改插件自己的Build.cs

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

然后回到项目文件,点击Generate Visual这个选项

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

再次打开,可以发现右边已经有我们的MyDemoDll文件夹了.

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

为了后续测试,这里我们再修改一下

这里是添加了引擎内容和UObject内容,用来生成Actor进行测试

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

PublicDependencyModuleNames.AddRange( new string[] { "Core", "CoreUObject", "Engine", "MyThirdPartyDemoPluginLibrary", "Projects", "MyDemoDll" // ... add other public dependencies that you statically link with here ... } );

点击MyThirdPartyDemoPlugin.h,修改ExampleLibraryHandle

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

点击插件目录下的MyThirdPartyDemoPlugin.cpp,在这里修改dll位置

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

将LibraryPath修改成我们自己的dll路径,删除掉多余的if,并且在endif后面添加一行代码

FPlatformProcess::PushDllDirectory(*(FPaths::ProjectDir() / TEXT("Plugins/MyThirdPartyDemoPlugin/Binaries/ThirdParty/MyDemoDll/Win64")));

这一行的意思是如果LibraryPath的DLL有别的DLL引用,那么就在Plugins/b1/Binaries/ThirdParty/MyDemoDll这个路径内搜索

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

现在可以打开UE,创建调试了

点击右上角的Run

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

在Tool中选择New C++ Class

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

注意,这里的runtime选择插件MyThirdPartyDemoPlugin

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

点击创建

在MyDllDemoActor.h下面新建一个ADDtest

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

来到cpp

修改刚刚创建的ADDTest

其中,mode前面是你的插件名字

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

这一段的意思是先创建一个函数指针MyDllAddTest,后面是传入的变量

typedef int (*MyDllAddTest)(int dlla,int dllb); MyDllAddTest GMyAddTest; int AMyDllDemoActor::ADDtest(int a, int b) { FString procName = "MyTestAdd"; FModuleManager& fmode = FModuleManager::Get(); FMyThirdPartyDemoPluginModule* mode = (FMyThirdPartyDemoPluginModule*)fmode.GetModule("MyThirdPartyDemoPlugin"); if(!mode) { UE_LOG(LogTemp,Error,TEXT("加载 mode 失败")); return 0; } if(FPlatformProcess::GetDllExport(mode->ExampleLibraryHandle, *procName) == nullptr) { UE_LOG(LogTemp,Error,TEXT("加载 GetDllExport 失败")); return 0; } GMyAddTest = (MyDllAddTest)FPlatformProcess::GetDllExport(mode->ExampleLibraryHandle, *procName); int dllreturn = GMyAddTest(a,b); return dllreturn; }

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

编写蓝图

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记

输出3的时候,就说明DLL库使用成功了

UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记文章来源地址https://www.toymoban.com/news/detail-420021.html

到了这里,关于UE5.1保姆级创建第三方插件库使用DLL,以及踩坑笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在微信小程序里面使用npm安装第三方插件(以安装vant ui为例)

    1.在cmd里或者是终端里,找到对应的项目,并执行下面的命令,用来初始化package.json文件。 2.勾选下图选项 3.执行下面的命令安装vant ui 然后你会发现多了一个node_modules文件, 里面存的就是第三方组件。 4.最后一步,每次安装完一个新的第三方插件都要执行“构建npm” 执行完

    2024年02月14日
    浏览(68)
  • 全网最全,基于docker 创建的Minio容器配置Https 访问,不使用第三方服务

    1.需要一个域名ssl证书 阿里云有免费的,可以使用,推荐链接: https://yundunnext.console.aliyun.com/?spm=a2c4g.11186623.0.0.3efc4f2epEe03yp=cas#/overview/cn-hangzhou 2.使用docker的主机模式     --network=host 3.在宿主机上的  /etc/hosts  添加域名映射  127.0.0.1     minio.demo.com 4.将证书配置挂载到mini

    2024年04月13日
    浏览(49)
  • 项目中拖拽元素,可以使用html的draggable属性,当然也可以用第三方插件interact

    html的draggable属性需要自己写逻辑,用人家封装好的代码简单逻辑清楚,非常香 链接: https://blog.csdn.net/vvv3171071/article/details/122705408

    2024年02月08日
    浏览(54)
  • pytest 第三方插件

    目录 前言: 顺序执行:pytest-ordering 失败重试:pytest-rerunfailures 并行执行:pytest-xdist pytest 是一个广泛使用的 Python 测试框架。它具有强大的测试运行器、测试驱动开发和测试结果可视化等功能。除此之外,pytest 还支持许多第三方插件,这些插件可以为测试带来更多的便利和

    2024年02月16日
    浏览(47)
  • 若依实现第三方登录,史上最全保姆级教程

    2.3.1:实体类 2.3.2:mapper.java 2.3.3:mapper对应的xml 2.3.4:service接口 2.3.5:service实现类 2.3.5:SysUserThirdAccountController 3.8.1:在原来的注入UserDetailsService类上添加注解指定userDetailsByPasswordService 3.8.2:添加认证白名单,这几个链接配置为免登录链接 3.8.3:将AuthenticationGiteeProvider注入

    2024年01月21日
    浏览(37)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年04月12日
    浏览(52)
  • SpringBoot整合第三方技术 -- SpringBoot快速入门保姆级教程(三)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月09日
    浏览(42)
  • 微信小程序第三方插件申请

    记录下小程序申请插件的页面,之前自己找了很久,方便后续使用 1. 先找到自己需要的第三方插件的appid 2. 登录微信公众平台后台(mp.weixin.qq.com) 3. 打开小程序插件页面          https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=插件appid         如小程序直播的页面就是:http

    2024年02月09日
    浏览(59)
  • JMeter进阶-常用第三方插件讲解

    准备工作: 1.最新版本的JMeter是默认不展示插件管理器的,所以我们需要手动添加插件管理器 2.下载地址:https://jmeter-plugins.org/install/Install/,下载插件plugins-manager.jar,然后将jar包放在apache-jmeter-x.x.xlibext路径下,重新打开jmeter客户端即可在“选项”下面可以看到了Plugins-Ma

    2023年04月08日
    浏览(49)
  • uniapp原生插件开发调用第三方SDK

    uniapp安卓官方SDK Android 离线SDK - 正式版 | uni小程序SDK 官方uni原生插件开发教程(android)网址: 简介 | uni小程序SDK 第一步,开发环境的准备 下载uniapp安卓官方SDK待后面使用,解压完成如下图所示。 JAVA环境 jdk,打开cmd输入java -version查看自己的jdk版本,官方文档中提示jdk版本应

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包