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动态链接库 的相关文章

  • 如何解决x盘莫名出现的msdia80.dll文件

    如何解决x盘莫名出现的msdia80 dll文件 参考文章 https zhuanlan zhihu com p 138954717
  • 【UE4】多视角相机捕获图像如何同屏拼接在一起

    前段时间有个Demo移植的需求 需要把实时裸眼3D多视角立体显示的Unity版本移植到UE4 主要包含后处理Shader 相机矩阵变换 多视角画面平铺拼接三大部分 10 10 多视角相机捕获图拼接效果 对现有的多窗口显示方法进行查阅后 发现
  • UE4 蓝图通信:接口调用

    UE4学习心得 蓝图间信息通信的几种方法 UE4的接口调用技术有点简单粗暴 而且主要体现在主蓝图对子蓝图的信息通信 在内容浏览器中添加一个蓝图接口 命名为TestInterface 双击打开接口 直接使用其创建时自带的一个接口函数 将其重命
  • ue4中Pak文件中挂载的资源名称获取

    在pak文件中 会挂接很多资源 api也在变化 废话不多说 上代码 FPakPlatformFile GetPakPlatformFile FPakPlatformFile pakPlatformFile nullptr auto plat
  • 修改UE4缓存路径,免得太多占用c盘空间

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 修改默认缓存路径 打开Epic Games 自定义缓存位置 前言 在安装好了UE4之后 UE4引擎会默认生成缓存路径 C Users ASUS AppData Local Unre
  • C++之模板<template>

    目录 前言 模板 1 泛型编程 2 函数模板 2 1 函数模板的概念 2 2 函数模板的格式 2 3 函数模板的原理 2 4 函数模板的实例化 2 5 模板参数的匹配原则 3 类模板 3 1 类模板的概念 3 2 类模板的格式 3 3 类模
  • UE4 UI实现改键功能

    主要内容 本文主要讲解如何在UI中实现自定义按键的功能类似于游戏中的改键操作 用到的是UE4自带的第三人称案例 因为第三人称自带了小白人和几个按键绑定就不用再手动去设置 实现步骤 1 创建两个UMG用来展示UI效果 1 创建WBP Key
  • UE-从鼠标出进行射线检测

    第一种方式 Convert Mouse Location To World Space 将鼠标屏幕2D位置转换为场景空间3D位置和方向 将鼠标位置从2D转换成3D 第二种方式 Deprohiect Screen to World 将给定的2
  • [UE4笔记] 3DUI空间交互

    在Actor中使用widget的时候制作3DUI 如果直接选择World模式 鼠标和UI是无法产生交互的 只要勾选了红框里的选项 就可以正常交互了 老是忘记 所以写个笔记记录一下 效果 注意 如果你还是点击不到 输入控制台命令showfla
  • 11月8日 改良射线,蓝图 UE4斯坦福 学习笔记

    修改射线类型 更改了昨天的射线类型 void USInteractionComponent PrimaryInteract 射线 FHitResult FHit 碰撞体 FCollisionObjectQueryParams ObjectQ
  • UE4 实现用鼠标旋转场景中的物体

    本文实现的是用在UE4 中用鼠标旋转场景中的物体 点击到物体时开始物体旋转功能 移动鼠标物体跟着旋转相应的角度 松开鼠标左键物体停止旋转 下面介绍实现此功能的蓝图逻辑 由于比较简单就不一一介绍了 直接贴上蓝图代码 如有问题欢迎交流
  • 【待续】【UE4笔记】 L10地形编辑器

    一 地形界面 包含了管理 雕刻和描画功能 1 创建新项 2 雕刻 改变地形高度 顶点位置 3 描画 分层地形材质 二 编辑样条 调节参数 添加材质 效果如下
  • UE44如何使用Geometry(BSP)笔刷,快速创建游戏原型?

    游戏原型搭建 如何快速搭建场景 一 好处1 防止同时也放大了对应的网格 如果像unity里面一样 R放大缩小以后 网格也会对应拉伸 失真 导致了材质会被拉伸或者缩小 1 选择Geometry 在BrushSetting里面 将X Y Z对应
  • UE4_积分相同排名显示问题

    找了一下ue4 rank 函数相关 没找到合适的 自己简单写了个 解决积分相同时名次要一样 之后顺位排序 中国式排名 蓝图实现 c 原理一样 1 2 3 4 5
  • 时间戳获取

  • UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解 参考 AttributeSet是设置玩家属性的比如生命值 最大生命值 GameplayEffe
  • UE4 制作导出Content目录下某个文件夹内所有模型的六视图并将模型资源文件复制到指定文件夹的插件

    一 新建空白插件 在Bulid cs内加入两个模块 EditorSubsystem UnrealEd PublicDependencyModuleNames AddRange new string Core EditorSubsystem
  • UE4 解决景深效果闪烁问题

    原因 1 模型的垂直竖线 造成抗锯齿算法对竖线的渲染计算 处于一种不稳定的状态 因此闪烁 解决办法 使用LOD 用贴图去替代线条模型 2 材质的法线贴图 当法线贴图含有垂直竖线的纹理效果 也会造成闪烁 比如这种幕墙材质 解决办法 关闭或动态
  • cesium for ue->CesiumUtility

    该模块共18个文件 3152行 含注释 截至2022年11月9日 剩下13个文件 1443行
  • 【UE5.2】通过Water插件使物体漂浮在水面上

    效果 步骤 1 新建一个工程 创建一个Basic关卡 添加初学者内容包到内容浏览器 2 在插件中启用 Water 插件 然后重启工程 3 重启后提示 碰撞描述文件设置不包括水体碰撞描述文件的条目 水碰撞必须使用该描述文件才能正常工作 将条目

随机推荐

  • 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动态链