UE4加载使用自定义dll动态链接库

2023-11-12

本人在写这篇文章时候,网上已经有很多相关的文章,但是网上的文章缺少逐步指引,本人看的云里雾里,估计刚接触相关工作的人看的也不是很清楚。本着自己记录和让他人少踩一些坑的宗旨------这篇文章诞生了。好了,不多BB,直接进入主题。

创建自定义dll动态链接库

首先新建一个动态链接库的C++项目:

在这里插入图片描述

然后在项目里添加C++类:DllClass,内容如下:

//.h

#define DLL_EXPORT __declspec(dllexport)

#define PI 3.1415926

#ifdef __cplusplus
extern "C"
{
#endif	
	float DLL_EXPORT getCircleArea(float radius);
#ifdef __cplusplus

}

#endif

其中这几句是必须的,其他的可以省略掉,其他内容的意思是以C语言的方式编译这段代码,可以根据项目需要添加或删除

//.h
//要导出的函数必须要加__declspec(dllexport)前缀,此处声明DLL_EXPORT代替这个略显繁琐的前缀
#define DLL_EXPORT __declspec(dllexport)
//定义π
#define PI 3.1415927
//要导出的函数(求圆的面积)
float DLL_EXPORT getCircleArea(float radius);

cpp没什么可看的,实现了一个非常简单的一个求圆的面积的函数

//.cpp

#include "pch.h"
#include <math.h>
#include "dllClass.h"

float DLL_EXPORT getCircleArea(float radius)
{
	return (PI * pow(radius,2));
}

然后选择x64 Release开始编译:
在这里插入图片描述

这里注意不要傻乎乎选择x86,因为UE4是x64 Orz

编译成功后会在项目目录的 x64\Release 下看到已经生成成功dll文件了。
在这里插入图片描述

加载自定义dll动态链接库

首先创建一个ue4 c++的项目,相信这一步就不用我详细介绍了吧~

创建DLL的文件夹,和Content同级:
在这里插入图片描述

把上一步生成的dll文件拷贝到里面:
在这里插入图片描述

然后新建一个C++类用于加载和使用dll文件,选择继承:BlueprintFunctionLibrary
在这里插入图片描述
C++类里添加函数:

//.h

	UFUNCTION(BlueprintCallable, Category = "GZW|DLL")
		static float getCircleArea(float radius);
//.cpp

//求圆面积的函数指针
typedef float (*_getCircleArea) (float radius);

float MyBlueprintFunctionLibrary::getCircleArea(float radius)
{
//dll文件路径
	FString filePath = FPaths::Combine(*FPaths::ProjectDir(), TEXT("DLL/"), TEXT("GzwDll.dll")); // Concatenate the plugins folder and the DLL file.       

	if (FPaths::FileExists(filePath))		//Can the file be found?
	{

		void* DLLHandle;

		DLLHandle = FPlatformProcess::GetDllHandle(*filePath);
		if (DLLHandle != NULL)
		{
			_getCircleArea DLLgetCircleArea = NULL;
			//DLL中定义的函数的名称
			FString procName = "getCircleArea";					 //The name of the function defined in the DLL
			DLLgetCircleArea = (_getCircleArea)FPlatformProcess::GetDllExport(DLLHandle, *procName); // Export the DLL function.
			if (DLLgetCircleArea != NULL)
			{
				float out = DLLgetCircleArea(radius); // Call the DLL function, with arguments corresponding to the signature and return type of the function.
				return out; // return to UE
			}
		}
	}
	else
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Dll file not found !!!"));
	}
	return 1.00f;
}

随便创建个蓝图放到世界里,圆的半径设置为3.0:
在这里插入图片描述
可以看到屏幕正确输出了圆的面积:
在这里插入图片描述

把自定义Dll封装成插件供UE引擎使用

待更新~~

![在这里插入图片描述](https://img-blog.csdnimg.cn/4a0d8c0c64dc42438c0a2270aabf7ac2.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4加载使用自定义dll动态链接库 的相关文章

随机推荐

  • LeetCode 每日一题 2022_list

    网页链接 LeetCode 坚持住 小镁铝 2022年1月每日一题记录
  • Zabbix--部署--03--proxy安装--6.0

    Zabbix 部署 03 proxy安装 6 0 1 介绍 1 1 官方安装文档 https www zabbix com cn download 1 2 环境介绍 操作系统 centos7 zabbix版本 6 0 LTS 2 准备工作
  • 循环中调用异步接口获取数据

    前言 遇到这样一个需求 调用接口 返回一个新闻列表 再循环这个新闻列表 用每个新闻的id异步请求这个新闻的视频地址 这就需要在循环里调用接口 如果用for循环 接口还没请求完成 for循环就已经执行完了 所以改成promise去处理 开始
  • 支持可变函数调用的php函数,可变函数 - PHP 7 中文文档

    可变函数 PHP 支持可变函数的概念 这意味着如果一个变量名后有圆括号 PHP 将寻找与变量的值同名的函数 并且尝试执行它 可变函数可以用来实现包括回调函数 函数表在内的一些用途 可变函数不能用于例如 echo php7 function
  • 在数学空间中,物理分辨率可能失去了意义(behind the paper)

    写在前面 2020 01到2021 07于我来说 是非常艰难的两年 所以这段时间一直也没有在CSDN持续整理 转载一些CV知识了 而这期间经历了4 5轮审稿 从nature辗转nature biotechnology 终于把第一篇工作发表了
  • linux服务器安装配置jdk

    1 下载jdk 用wget命令 下载linux对应版本的jdk到 usr local 然后解压 cd usr local wget http download oracle com otn pub java jdk 7u79 b15 jdk
  • [转]Untiy学习 -一个简单的有限状态机(FSM)

    前言 参考资料 unity3D FSM有限状态机 状态设计模式 核心 先列举有限数量的状态 让需要被控制的物体在状态中根据设定流转 并且每次只存在一个状态被激活 三个方案 声明一个enum字典 写入所有的状态 public enum Ene
  • 基于springboot+Thymeleaf的校园二手交易平台(附源码获取链接)

    项目描述 以SpringBoot为项目框架开发的二手交易网站 主要用作个人学习 网站的功能模块有 买家模块 卖家模块 购物车 模块 订单模块 内容管理模块 通过这一系列模块能基本满足二手商品的线上交易 基本功能也全部实现 技术架构 Spri
  • 怎么解密PDF文档?这三款解密方法亲测实用

    在日常办公中 我们经常会接触到PDF文件 有时候为了保护文件不被随意查看编辑 会给PDF文件进行加密操作 但是如果出现特殊情况 需要让其他人进入文档查看 就要对其进行解密 可能还有很多小伙伴不清楚加密的PDF怎么解密 别急 今天我给大家分享
  • top命令学习

    文章目录 一 top命令回显信息含义 1 第一行 2 第二行 3 第三行 4 第四行 5 第五行 6 第六行进程信息 二 top简单交互 1 按数字 1 显示列出所有cpu的信息 2 按 M 按内存使用率从大到小排序 3 按 P 按CPU使
  • linux中源码安装node

    Linux上安装Node js 直接使用已经编译好的包 node 官网已经把linux 下载版本更改为已经编译好的版本了 我们可以直接下载解压后使用 wget https nodejs org dist v14 15 0 node v14
  • 2018年终总结及2019计划

    第一次写总结性的文章 就想到哪写哪吧 1 上半年软考考试 我考的计算机系统集成项目管理工程师 原先公司是对有证书的人每月都有一定的奖励 然后就去考了 哈哈 当时确实是因为奖励 经过几个月断断续续的复习 结果也挺顺利的考过了 2 转战上海 我
  • Nginx篇04-map模块

    nginx的map模块配置语法 map模块是由ngx http map module模块提供的 只能在http模块下使用 nginx默认自带安装 map 的主要作用简单来说就和编程语言中的赋值语句有点像 只不过这里称为映射 map 具体来说
  • 使用python进行文件夹重命名

    import os file name JPEGImages 文件存放地址 count 0 for file in os listdir file name os rename os path join file name file os
  • 串的模式匹配(KMP算法)

    问题描述 串的模式匹配算法实现 KMP算法 输入形式 第一行输入主串s 第二行输入模式串t 第三行输入起始位置pos 输出形式 输出模式串t的next值 以空格分隔 输出模式匹配结果 样例输入1 ababcabcacbab abcac 1
  • 为什么输入法显示中文打不出中文_输入法为什么打不出汉字_电脑输入法打不出汉字如何解决-win7之家...

    我们要在电脑中使用输入法打字的时候 不急可以打出汉字也可以打出英文 不过有不少用户却遇到了输入法打不出汉字的情况 这让用户们很苦恼 那么输入法为什么打不出汉字呢 一般出现这样的问题是输入法出现了问题 我们只要修复一下即可 赶快随小编一起来看
  • # 后端开发技巧、常用规范

    后端开发技巧 常用规范 文章目录 后端开发技巧 常用规范 开发技巧 equals 方法的使用 创建 HashMap 指定初始化大小 Optional ofNullable orElse 避免空指针 Stream 求和 List 切割工具 单
  • vue引用js文件的多种方式

    1 vue cli webpack全局引入jquery 1 首先 npm install jquery save save 的意思是将模块安装到项目目录下 并在package文件的dependencies节点写入依赖 2 在webpack
  • radius的认证过程

    转载自 http blog donews com zyqin archive 2008 09 01 1341486 aspx RADIUS 远程用户拨号认证系统 是Remote Authentication Dial In User Ser
  • UE4加载使用自定义dll动态链接库

    本人在写这篇文章时候 网上已经有很多相关的文章 但是网上的文章缺少逐步指引 本人看的云里雾里 估计刚接触相关工作的人看的也不是很清楚 本着自己记录和让他人少踩一些坑的宗旨 这篇文章诞生了 好了 不多BB 直接进入主题 创建自定义dll动态链