UE4.27 C++调用DLL

news2024/11/16 21:26:49

1.首先在UE C++项目中添加一个x64动态链接库,取名RouteInterface,放到Source下面;
在这里插入图片描述
在这里插入图片描述
2.在Source下面新建两个文件夹Include和Lisbs,这两个文件夹用来保存库的头文件和lib文件
在这里插入图片描述
3.在项目RouteInterface下面添加一个类:TestDll,并且把头文件保存到Include/RouteInterface下面,并且在添加一个导入导出符号的头文件ExportGlobal.h
在这里插入图片描述
ExportGlobal.h

#pragma once

#ifdef ROUTEINTERFACE_EXPORTS
#define EXPORT_LIB __declspec(dllexport)
#else
#define EXPORT_LIB __declspec(dllimport)
#endif

TestDll.h

#pragma once
#include "ExportGlobal.h"

/**
测试使用
*/
class EXPORT_LIB TestDll {
public:
	int add(int a, int b);
};

TestDll.cpp

#include "pch.h"
#include "RouteInterface/TestDll.h"

int TestDll::add(int a, int b) {
	return a + b;
}

4.设置配置,头文件包含目录
在这里插入图片描述
5.添加【生成后事件】
在这里插入图片描述

copy $(TargetPath) $(ProjectDir)..\..\Binaries\Win64\
copy $(OutDir)$(TargetName).lib $(ProjectDir)..\Libs\

6.编译以后,RouteInterface.dll生成在:F:\004_Ue4\RotorUAV_26_27\Binaries\Win64 目录下
编译选项:Debug x64 在这里插入图片描述
在这里插入图片描述
RouteInterface.lib生成在F:\004_Ue4\RotorUAV_26_27\Source\Libs目录下
在这里插入图片描述
7.在UE C++工程总添加过滤器,RouteInterface并且把两个头文件添加上去
在这里插入图片描述
8.在RotorUAV.Build.cs中添加

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

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

整文件内容:

// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.IO;

public class RotorUAV : ModuleRules { 

	private string ModulePath 
	{
        get
        {
			return ModuleDirectory;
        }
	}

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

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

		PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

		// 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, "RouteInterface.lib"));
    }
}

9.在类AMainPlayerController中调用
包含头文件:

#include "../Include/RouteInterface/TestDll.h"

调用:

	TestDll testDll;
	int32 a = testDll.add(6, 5);
// Fill out your copyright notice in the Description page of Project Settings.


#include "MainPlayerController.h"
#include "Blueprint/UserWidget.h"
#include "../Include/RouteInterface/TestDll.h"

AMainPlayerController::AMainPlayerController() {

}

//这个宏是为了显示调试信息使用
PRAGMA_DISABLE_OPTIMIZATION

void AMainPlayerController::BeginPlay() {
	TestDll testDll;
	int32 a = testDll.add(6, 5);

	if (uavMainHUDAsset) {
		uavMainHUD = CreateWidget<UUserWidget>(this, uavMainHUDAsset);
	}
	uavMainHUD->AddToViewport();
	uavMainHUD->SetVisibility(ESlateVisibility::Visible);

	//鼠标在游戏和界面中同时起作用
	FInputModeGameAndUI gameAndUI;
	SetInputMode(gameAndUI);
	bShowMouseCursor = true;
}

PRAGMA_ENABLE_OPTIMIZATION

运行选项:Developter Editor 和 Win64
在这里插入图片描述

运行结果:
在这里插入图片描述

aaa

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis-Plus查询投影与查询条件设置

目录 查询投影 查询指定字段 聚合查询 分组查询 查询条件设置 等值查询 范围查询 模糊查询 排序查询 查询投影 目前我们在查询数据的时候&#xff0c;什么都没有做默认就是查询表中所有字段的内容而查询投影即不查询所有字段&#xff0c;只查询出指定内容的数据 查询指…

九、文件File、IO流

文件File File可以用来表示计算机中的文件或者文件夹官方定义&#xff1a;文件和文件夹路径名的抽象表示形式 3种构造 1File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例2File(String parent, String child) 从父路径名字符串和子路径名字…

2022硅谷大厂的大!失!败!AiDA时尚设计师助手;2023热门IT技能预告;Uber送货机器人;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f4e2; 『抖音』2022抖音热点数据报告&#xff0c;共度温暖岁末 抖音热点联合巨量算数&#xff0c;发布了《2022抖音热点数据报告》&#xff0c;盘点了20…

如何在pycharm上安装tensorflow

TensorFlow™是一个基于数据流编程&#xff08;dataflow programming&#xff09;的符号数学系统&#xff0c;被广泛应用于各类机器学习&#xff08;machine learning&#xff09;算法的编程实现&#xff0c;其前身是谷歌的神经网络算法库DistBelief 。 Tensorflow拥有多层级结…

qt 崩溃处理

Windows系统MSVC编译器的dump文件 debug模式 生成exe自带生成pdb文件&#xff0c;所以无需处理。 1.生成dump文件 通过修改注册表&#xff0c;增加注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps 具体见&#xff1a;利用vs 分…

Forrester Wave发布最新报告 腾讯云数据连接器评分卓越

全球权威研究机构 Forrester 在2022年12月8日最新发布的《中国公有云开发和基础设施平台&#xff0c;Q4 2022》报告中&#xff0c;腾讯云获得高分&#xff0c;位列“领导者象限”。Forrester在报告中提出&#xff1a;“企业在进行公有云开发和基设施平台提供商的选项中&#xf…

php宝塔搭建部署实战帮管客CRM客户管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的帮管客CRM客户管理系统源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xf…

商业智能BI中,业务质量分析和业务成本分析

最初谁也没有想到&#xff0c;信息化 、数字化技术及其应用能够在如此短时间内快速覆盖了社会的方方面面&#xff0c;如今人们的衣食住行和工作生活娱乐都离不开数字化、数据的身影。 数据分析&#xff0c;是离不开业务的&#xff0c;只有把业务研究好了&#xff0c;所做出的报…

Numpy 数组切片

一、列表切片&#xff08;一维数组&#xff09; 1.1、切片原理 列表切片是从原始列表中提取列表的一部分的过程。在列表切片中&#xff0c;我们将根据所需内容&#xff08;如&#xff0c;从何处开始&#xff0c;结束以及增量进行切片&#xff09;剪切列表。Python中符合序列的…

【论文阅读】Online Decision Based Visual Tracking via Reinforcement Learning

Online Decision Based Visual Tracking via Reinforcement Learning 概述 本文2020年发布于NeurIPS(CCF-A)。视觉跟踪通常基于目标检测或者模板区配&#xff0c;但它们都只适用于特定的场景或对象。因为它们遵循不同的跟踪原则&#xff0c;直接将它们融合在一起是不明智的。…

会话技术和JSP技术

会话技术&#xff1a;一次会话中包含多次的请求和响应 一次会话&#xff1a;浏览器第一次给服务器资源发送请求&#xff0c;会话建立&#xff0c;直到有一方断开为止 功能&#xff1a;在一次会话的范围内共享数据 方式&#xff1a; 1、客户端会话技术&#xff1a;Cookie 2、服务…

我司赤城弘一CEO受邀参加东盟与中日韩中小企业人工智能产业论坛并做主旨发言。

我司赤城弘一CEO受邀参加东盟与中日韩中小企业人工智能产业论坛并做主旨发言。 一、活动背景 为推动东盟与中日韩&#xff08;103&#xff09;中小企业服务联盟务实合作&#xff0c;帮助中小企业提高生产力和技术创新能力&#xff0c;进一步提高国际化发展水平&#xff0c;促进…

Web前端期末大作业---新农村建设网页设计

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&#xff01;☀️ &#x1f525;前言 期末来咯&#xff0c…

Unity脚本(一)

视频教程&#xff1a;https://www.bilibili.com/video/BV12s411g7gU/?p112 目录 脚本 特性 控制台Console 脚本生命周期 Assembly-CSharp.dll 调试 Component 脚本 脚本是附加在游戏物体上用于定义游戏对象行为指令的代码&#xff0c;需要继承自MonoBehaviour类 编…

使用VTK和Python进行体绘制

使用VTK和Python进行体绘制IntroductionVolume Rendering1. Imports2. Helper-functions3.Options4. Image-Data Input5. Prep-work6. Volume RenderingIntroduction 科学可视化技术是运用计算机图形学、图像处理、计算机视觉等方法&#xff0c;将科学、工程学、医学等计算、测…

亚马逊跨境电商可靠吗?2023年还可以做吗?

新的一年新的打算&#xff0c;不少小伙伴在问&#xff0c;亚马逊跨境电商可靠吗&#xff1f;2023年还可以做亚马逊跨境电商吗&#xff1f;为此我们小编就来简单说说自己的想法吧&#xff01; 亚马逊跨境电商可靠吗&#xff1f; 【回答】&#xff1a;首先我们需要肯定一点的是&…

【Unity3D日常开发】Unity3D中屏蔽不想显示的黄色警告消息

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群&#xff1a;1040082875 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;会有一些脚本…

在vue项目中使用rem的完整步骤

首先要知道几个概念&#xff1a; 设计稿是物理像素&#xff0c;在移动端上是css像素&#xff0c;1css像素2物理像素/3物理像素&#xff1b; 要想实现一张设计稿的尺寸能在各个移动端上适配&#xff0c;因为不同的移动端的css像素和物理像素比不一样&#xff0c;所以固定的物理…

【前端】Vue项目:旅游App-(1)搭建项目、重置css、配置router和store(pinia)

文章目录创建项目搭建和配置项目&#xff1a;项目目录结构划分重置CSSnormalize.cssreset.css目录结构配置router对应页面组件index.js配置store创建项目 npm init vuelatest本项目相关选择&#xff1a; 安装相关依赖&#xff1a; npm install试着跑一下&#xff1a; npm ru…

提面录取占比:浙大MBA MPA MEM复试中不可忽视的关键因素之一。

对于复试考生来说&#xff0c;单纯的探讨某个专业有多少人报考没有太大意义&#xff0c;单纯的关注这个专业招多少人也没有太多意义&#xff0c;我们要更加关注在复试阶段还能剩余多少录取指标&#xff0c;因为这个才是复试考生直接相关的数据。不同项目和专业间目前对提前批面…