当前位置: 首页 > wzjs >正文

深圳网站建设排名app接入广告变现

深圳网站建设排名,app接入广告变现,传奇手游下载平台手机版,临沂有哪几家做网站的之前在UE中加载第三方库的形式是以静态或者动态链接的形式加载但是不太容易复用。就想着能不能以插件的形式加载第三方库,这样直接把插件打包发行就可以复用了,之前也找过相应的教程但是很难找到比较简单易懂的教程,要么是比较复杂&#xff0…

之前在UE中加载第三方库的形式是以静态或者动态链接的形式加载但是不太容易复用。就想着能不能以插件的形式加载第三方库,这样直接把插件打包发行就可以复用了,之前也找过相应的教程但是很难找到比较简单易懂的教程,要么是比较复杂,要么是自己跟着教程做了一遍但是打包插件的时候,打包不成功。自己在经过各种查找教程及自己总结,发现了一种感觉相对比较简单的方法,下面把整体的过程介绍一下。
1 先创建一个C++的UE 项目,在项目中创建一个空白的插件,可以使用不同的UE版本,博主使用的是UE5.5 如下图
在这里插入图片描述
在这里插入图片描述
在MyPlugin下新建 ThirdParty文件夹,在ThirdParty文件下新建
include,lib,Win64文件夹,在include文件夹下放需要调用的第三放库的.h文件,在lib文件下放相应的.lib文件,Win64下放相应的.dll 文件。我这里用的 pch.h Wll_Dll.lib Wll_Dll.dll (创建第三库的方法之前写过,这里不再赘述)
在这里插入图片描述
2 下面开始设置MyPlugin.Build.cs的设置,整体的代码如下

// Copyright Epic Games, Inc. All Rights Reserved.using System.IO;
using UnrealBuildTool;public class MyPlugin : ModuleRules
{public MyPlugin(ReadOnlyTargetRules Target) : base(Target){// 使用共享 PCH,减少编译时间PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;// 添加依赖模块,确保 UHT 正确生成代码PublicDependencyModuleNames.AddRange(new string[] {"Core","CoreUObject","Engine"});PrivateDependencyModuleNames.AddRange(new string[] {"Slate","SlateCore"});// 获取插件目录路径string PluginPath = ModuleDirectory;string ThirdPartyPath = Path.Combine(PluginPath, "../../ThirdParty");// 确保 DLL 在打包时会被复制到 Binaries/Win64if (Target.Platform == UnrealTargetPlatform.Win64){string DLLPath = Path.Combine(ThirdPartyPath, "Win64", "Wll_Dll.dll");// 添加运行时依赖,确保 DLL 被复制到 Binaries 目录RuntimeDependencies.Add("$(PluginDir)/Binaries/Win64/Wll_Dll.dll", DLLPath, StagedFileType.NonUFS);}}
}

在运行时加载.DLL 关闭时卸载,MyPlugin.h的代码如下

#pragma once#include "Modules/ModuleManager.h"
// DLL 句柄和函数指针
void* DLLHandle = nullptr;
typedef int (*AddNumbersFunc)(int, int);
AddNumbersFunc AddNumbersPtr = nullptr;
class FMyPluginModule : public IModuleInterface
{
public:/** IModuleInterface implementation */virtual void StartupModule() override;virtual void ShutdownModule() override;
};

MyPlugin.cpp 的代码如下

// Copyright Epic Games, Inc. All Rights Reserved.#include "MyPlugin.h"
#include "Misc/Paths.h"
#include "HAL/PlatformProcess.h"
#define LOCTEXT_NAMESPACE "FMyPluginModule"void FMyPluginModule::StartupModule()
{// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-moduleFString DLLPath = FPaths::Combine(FPaths::ProjectPluginsDir(), TEXT("MyPlugin/Binaries/Win64/Wll_Dll.dll"));UE_LOG(LogTemp, Warning, TEXT("Trying to load DLL from path: %s"), *DLLPath);if (!FPaths::FileExists(DLLPath)){UE_LOG(LogTemp, Error, TEXT("DLL not found at: %s"), *DLLPath);return;}// 加载 DLLDLLHandle = FPlatformProcess::GetDllHandle(*DLLPath);if (!DLLHandle){UE_LOG(LogTemp, Error, TEXT("Failed to load DLL: %s"), *DLLPath);return;}// 绑定 DLL 函数AddNumbersPtr = (AddNumbersFunc)FPlatformProcess::GetDllExport(DLLHandle, TEXT("Add"));//Dll 的两个导出函数 名 分别是 Add,Logif (!AddNumbersPtr){UE_LOG(LogTemp, Error, TEXT("Failed to bind AddNumbers function from DLL"));}else{UE_LOG(LogTemp, Warning, TEXT("AddNumbers function bound successfully"));}
}void FMyPluginModule::ShutdownModule()
{// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,// we call this function before unloading the module.if (DLLHandle){FPlatformProcess::FreeDllHandle(DLLHandle);DLLHandle = nullptr;UE_LOG(LogTemp, Warning, TEXT("DLL Unloaded Successfully."));}
}#undef LOCTEXT_NAMESPACEIMPLEMENT_MODULE(FMyPluginModule, MyPlugin)

创建c++的蓝图函数库如下,在蓝图库函数中创建调用函数并暴露给蓝图使用
在这里插入图片描述
MyBlueprintFunctionLibrary.h 的代码如下

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"/*** */
UCLASS()
class MYPLUGIN_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{GENERATED_BODY()
public:UFUNCTION(BlueprintCallable, Category = "MyPlugin")static int CallAddNumbers(int A, int B);
};

MyBlueprintFunctionLibrary.cpp的代码如下

 if (AddNumbersPtr){return AddNumbersPtr(A, B); // 调用 DLL 中的函数}else{UE_LOG(LogTemp, Error, TEXT("AddNumbersPtr is NULL!"));return -1; // 如果函数指针为空,返回错误}

以上就是整体的创建流程及完整的运行代码,下面贴上运行结果
在这里插入图片描述
在这里插入图片描述
现在打包还是不能够成功的,得在MyPlugin.uplugin 加上白名单
代码 “WhitelistPlatforms”: [“Win64”] 完整的MyPlugin.uplugin 代码如下

{"FileVersion": 3,"Version": 1,"VersionName": "1.0","FriendlyName": "MyPlugin","Description": "","Category": "Other","CreatedBy": "","CreatedByURL": "","DocsURL": "","MarketplaceURL": "","SupportURL": "","CanContainContent": true,"IsBetaVersion": false,"IsExperimentalVersion": false,"Installed": false,"Modules": [{"Name": "MyPlugin","Type": "Runtime","LoadingPhase": "Default","WhitelistPlatforms": ["Win64"]}]
}

加上后就可以打包插件了,也可以给别人使用你这个插件,好了本片文章到此结束。

http://www.dtcms.com/wzjs/302640.html

相关文章:

  • 深圳招聘网站排行seo排名优化价格
  • 网站地图怎么生成网络营销的含义是什么
  • 网站建设需要很强的编程seo人才网
  • 想让网站的文章都被收录怎么做seo培训赚钱
  • 深圳网站商城定制设计seo网站优化策划书
  • b2b网站模板下载网络培训平台有哪些
  • wordpress修改上传保定seo推广公司
  • 网站建设移交手续病毒式营销
  • 辽宁城乡建设工程招标网网站优化公司哪家好
  • 魏公村网站建设网站一键生成
  • 网站建设和管理专业上海seo推广整站
  • 专门做特卖的网站淘宝指数查询入口
  • 备案查询化妆品seo快排软件
  • 有每天做任务赚钱的网站吗发布软文的平台
  • 企业高端网站建设企业的互联网推广
  • 微网站制作工具加快实施创新驱动发展战略
  • b2c电子商务网站排名免费网站推广网站破解版
  • 周口做网站多少钱好用搜索引擎排名
  • 个人备案的网站可以做什么网页搜索引擎优化技术
  • 做网站插音乐怎么隐藏网站和网页的区别
  • 网站建设的具体流程一站式软文发布推广平台
  • 河南省电力工程建设企业协会网站易观数据app排行
  • 今网科技网站建设信息流优化师是什么
  • 网站建设规划书 预算网站排名靠前的方法
  • 温州做网站优化搜索引擎优化的定义
  • wordpress不显示子分类广州seo服务公司
  • 网站开发 建设叫什么竞价托管外包服务
  • 农村电商平台怎么加入官网关键词优化价格
  • 怎样到国外做合法博彩法网站营销推广工作内容
  • 怎么给公司做网站百度推广登陆入口