zoukankan      html  css  js  c++  java
  • UE4使用Dll

    Part1. 创建和编译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。

    Part2 拷贝到引擎目录

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

    这里放在D:Program Files (x86)Epic Games4.13EnginePluginsKenPlugins

    Part3 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名称

    Part4 蓝图中调用dll

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

  • 相关阅读:
    VS2005在使用membership的时候,如何连接Access数据库?
    今天想开始写计划的项目,可是就是静不下心来,乱糟糟的!
    今天想开始写计划的项目,可是就是静不下心来,乱糟糟的!
    有钱真好
    网页左边和上面的空隙如何设置成为0
    vim 配色方案(目测有上百个)
    Git 远程仓库的管理和使用
    vim 使用图
    Python 编程挑战
    python 网络爬虫
  • 原文地址:https://www.cnblogs.com/AnKen/p/6573693.html
Copyright © 2011-2022 走看看