UE4调用dll

发表于2018-01-23
评论1 8.7k浏览

本篇文章主要给大家介绍下如何在UE4中调用dll,通过一下四个步骤的介绍为大家解惑,想知道方法的可以看看。

1、创建和编译Dll

VS中创建Visual C++ > Win32 Console Application 工程模板,选择Dll,并勾上”Empty Project”。

在SolutionExplorer里选中工程,右键Add>New Item,选择C++ File

在新建的文件里输入测试代码:

extern "C" __declspec(dllexport) float getCircleArea(float radius)
{
     return 3.1416 * (radius*radius);
}

菜单Project>xxxProperties,Configuration Manager,把所有的关于位设置的都设置为x64

保存后Build Solution。

2、拷贝到引擎目录

在工程中找到x64文件夹下的dll. 复制到引擎Plugins目录,可以自己新建一个子文件夹放置自定义的插件。

这里放在D:\Program Files (x86)\Epic Games\4.13\Engine\Plugins\KenPlugins

3、UE4工程中加入Dll

创建一个C++ UE4工程

File>New C++ Class…

选择Blueprint Function Library作为父类

在生成的.h文件的类定义中加入如下定义:

public:
    // Blueprint accessible method.
    UFUNCTION(BlueprintCallable, Category = "Ken Libraries")
        static float getCircleArea(float radius);
在.cpp中加入以下代码
typedef float(*_getCircleArea)(float radius); // Declare the DLL function.
float UMyBlueprintFunctionLibrary::getCircleArea(float radius)
{
    FString filePath = FPaths::Combine(*FPaths::EnginePluginsDir(), TEXT("KenPlugins/"), TEXT("SampleDll.dll")); // Concatenate the plugins folder and the DLL file.    
    if (FPaths::FileExists(filePath))
    {
        void *DLLHandle;
        DLLHandle = FPlatformProcess::GetDllHandle(*filePath); // Retrieve the DLL.
        if (DLLHandle != NULL)
        {
            _getCircleArea DLLgetCircleArea = NULL; // Local DLL function pointer.
            FString procName = "getCircleArea"; // The exact name of the DLL function.
            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
            }
        }
    }
    return 1.00f;
}

重点内容 
其中UMyBlueprintFunctionLibrary 是类的名称,*FPaths::EnginePluginsDir()是引擎的插件目录, TEXT(“KenPlugins/”)是自定义的文件夹, TEXT(“SampleDll.dll”)是dll名称

4、蓝图中调用dll

在蓝图的Ken Libraries分类中找到 get circle radius节点即可使用

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引