UE5调用第三方DLL库

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

  在C++中,通常我们这样去调用,首先添加头文件路径和库文件路径并且将dll文件复制在输出目录下,然后在程序中添加一行代码,#pragma comment(lib, "mylib.lib"),接着就能正常调用了,但在打包之后就不行了。其实UE4有自己的一套调用Dll的方法,他通常用C#去管理上面的一堆事情。

那么我们要在UE5里面去调用第三方库该如何实现呢,其实和C++的调用逻辑差不多

首先准备好必要的三个文件,.h,.lib和.dll,然后用C#语言去告诉编译器我们的.h和.lib两个文件的路径,将dll文件放在输出目录下,最后在项目中引入头文件就能正常调用了

程序源码和打包后的项目

链接:https://pan.baidu.com/s/107PXU2PLVfyjPtRpLL7_-g 
提取码:5678

UE5调用第三方DLL库

下面我来演示一下具体的调用过程(用的是UE5和vs2022,其他版本也行,也适用ue4)

这只是一种方法,还有其他方法,比如做成模块,做成插件,再如动态调用,但我个人认为我下面的静态调用是我感觉最好用的方法

一.创建DLL库文件

我直接创建了一个空项目,项目属性改成了DLL,里面只有两个文件,一个.h和一个.cpp,具体代码如下,最后会生成三个所需的文件

UE5调用第三方DLL库

UE5调用第三方DLL库

//dll1.h
#ifndef DLL1_H
#define DLL1_H

#define FENGZHUANGCPP_API __declspec(dllexport)

class FENGZHUANGCPP_API Face
{
public:
	static	Face* CreateFace();
	virtual int Add(int a,int b) = 0;
	virtual int num(int a) = 0;
};

#endif 
//dll1.cpp
#include"dll1.h"
using namespace std;

class Face1 : public  Face
{
public:
	virtual int Add(int a, int b);
	virtual int num(int a) ;

};
Face* Face::CreateFace()
{
	return new Face1;
}

int Face1::Add(int a, int b)
{
	return a+b;
}

int Face1::num(int a)
{
	return a+1;
}

所需的文件

UE5调用第三方DLL库UE5调用第三方DLL库

 至此,第一步完成

二.UE4项目中引入第三方库文件

 2.1放置文件    

 在项目目录E:\UE5\MyProject3\Source\MyProject3新建一个文件夹ThirdParty,在ThirdParty文件夹里面新建两个文件夹include和lib,将准备好的头文件dll1.h放入include,将库文件的dll1.lib放入lib,将dll1.dll放在E:\UE5\MyProject3\Binaries\Win64下面

UE5调用第三方DLL库UE5调用第三方DLL库

 UE5调用第三方DLL库UE5调用第三方DLL库

 UE5调用第三方DLL库

 2.2添加C#代码

        在dll1.h中,将dllexport替换为dllImport。不改问题不大

打开MyProject3.Build.cs文件

 添加以下三段代码

UE5调用第三方DLL库

using System.IO;
	private string ModulePath
	{
		get
		{
			return ModuleDirectory;
		}

	}

	private string ThirdPartyPath
	{
		get
		{
			return Path.GetFullPath(Path.Combine(ModulePath, "ThirdParty"));
		}
	}
		//PublicIncludePaths为 通向此模块内部包含文件的所有路径的列表,不向其他模块公开(至少有一个包含到Private 路径,如果要避免相对路径,则会更多)
		PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "include"));
		//附加库列表,PublicAdditionalLibraries是一组包含其他预编译库的列表(.lib文件的名称列表,包含后缀)...
		PublicAdditionalLibraries.Add(Path.Combine(ThirdPartyPath, "lib", "Dll1.lib"));

添加完成后的MyProject3.Build.cs

// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;
using System.IO;

public class MyProject3 : ModuleRules
{
	private string ModulePath
	{
		get
		{
			return ModuleDirectory;
		}

	}

	private string ThirdPartyPath
	{
		get
		{
			return Path.GetFullPath(Path.Combine(ModulePath, "ThirdParty"));
		}
	}

	public MyProject3(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

		PrivateDependencyModuleNames.AddRange(new string[] {  });

		// Uncomment if you are using Slate UI
		// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

		// Uncomment if you are using online features
		// PrivateDependencyModuleNames.Add("OnlineSubsystem");

		// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
		//PublicIncludePaths为 通向此模块内部包含文件的所有路径的列表,不向其他模块公开(至少有一个包含到Private 路径,如果要避免相对路径,则会更多)
		PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "include"));
		//附加库列表,PublicAdditionalLibraries是一组包含其他预编译库的列表(.lib文件的名称列表,包含后缀)...
		PublicAdditionalLibraries.Add(Path.Combine(ThirdPartyPath, "lib", "Dll1.lib"));

	}
}

到此路径问题用C#就配置结束

2.2在UE4项目中使用

添加一个蓝图函数库的C++类

添加如下代码

    UFUNCTION(BlueprintCallable, Category = "My Library")
        static int BFL_Add(int num,int a1);
#include"../ThirdParty/include/dll1.h"

int UMyBlueprintFunctionLibrary::BFL_Add(int num, int a1)
{
   Face* fa = Face::CreateFace();

	return fa->Add(num,a1);
}

UE5调用第三方DLL库

UE5调用第三方DLL库

2.3测试一下

调用我们的函数

UE5调用第三方DLL库

执行结果如下

UE5调用第三方DLL库

 2.4打包一下

打包完成之后是没有我们自定义创建的DLL文件的,需要手动添加

Dll1.dll放入如下路径Binaries/Win64/

注意 一定是与exe文件放在同级目录的

UE5调用第三方DLL库

看看打包之后的运行效果,还是不错的哈

 UE5调用第三方DLL库

 至此结束。

我是参考下面两篇写的,他们写的还是不错的

http://t.csdn.cn/Db6aL

http://t.csdn.cn/OlrGf文章来源地址https://www.toymoban.com/news/detail-412596.html

到了这里,关于UE5调用第三方DLL库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C#--调用Python(包含第三方库)

    参考链接 可以很好的支持第三方库。 推荐这个,经本人验证这个很好用。 后文 2. 详细使用。 如果使用第三方库就放弃这个吧,真的用不了,使用时报各种错。 如果只是标准库,可以用这个。 只需要在 nuget 里装上 IronPython 和 IronPython.StdLib 即可。 使用参考链接 1.3.1 示例演

    2024年02月07日
    浏览(41)
  • uniapp小程序调用第三方地图导航

    效果    

    2024年02月15日
    浏览(38)
  • 我调用第三方接口遇到的13大坑

    在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。 那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢? 这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。   一般我们在第一次对接

    2023年04月16日
    浏览(58)
  • SpringBoot案例 调用第三方接口传输数据

    最近再写调用三方接口传输数据的项目,这篇博客记录项目完成的过程,方便后续再碰到类似的项目可以快速上手 项目结构: 这里主要介绍HttpClient发送POST请求工具类和定时器的使用,mvc三层架构编码不做探究 pom.xml application-dev.yml Constast utils scheduled 该定时任务每10秒执行一

    2024年02月12日
    浏览(60)
  • 仅仅是调用第三方接口那么简单吗?

    最近有个项目需要本地处理之后,然后调用第三方接口,本来开始觉得很简单得事情,不就是调用第三方接口吗?但是却一波三折。 首先有了下面的第一版的设计。 这个设计很简单,也是最容易想到的。主要有下面几步 1、本地处理; 2、调用第三方接口; 3、本地日志打印

    2024年02月06日
    浏览(66)
  • 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)
  • Android 项目调用第三方库so动态库

    在Android NDK开发中,可以通过自己编写C/C++代码来构建so动态库进行调用之外,还可以把so动态库提供给第三方使用;接下来,我将介绍在新创建的Android 项目(或已存在的Android 项目)中如何调用第三方so动态库。 关于如何进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用

    2024年02月16日
    浏览(45)
  • Java调用第三方http接口的常用方式

    前言 一、通过JDK网络类Java.net.HttpURLConnection 二、通过apache common封装好的HttpClient 三、通过Spring的RestTemplate 总结 今天项目需要接口互相调用,就看了一下这几个调用的方式 通过java.net包下的原生java.api提供的http请求 使用步骤: 通过统一的资源定位器(java.net.URL)获取连接器(java.

    2024年02月08日
    浏览(70)
  • 借助HttpWebRequest 调用第三方接口,获取Token和数据

    1、传入语句获取数据 2、获取token 3、获取设置身份认证及请求超时时间 4、在我使用的时候出现了下面的错误,通过查找是证书的问题,因为客户的web访问使用的IP地址访问,所以在代码中要加入跳过ssl验证的一行代码

    2024年03月18日
    浏览(51)
  • Java调用第三方库JNA(C/C++)

    GitHub - java-native-access/jna: Java Native Access  源代码  在Java 中使用C语言库的传统做法是使用JNI编程。但是现在有更好的替代方案,即JNA(Java Native Access);JNA是一个开源的Java框架,是SUN公司推出的调用本地库方法的技术,是建立在经典的JIN基础之上的一个框架,之所以说它是JIN的替

    2024年02月06日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包