【UE4】调用外部链接库:dll动态库

66 篇文章 6 订阅

加载

  • 方式一
    // dll内的函数引用声明
    typedef void(*_Initial)(
    char* thisPCID,
    char* thisConnectioninfo,
    char* thisExpVersion,
    char* thisSessionlD
    );
    
    void *DLLHandle;
    _Initial DLL_Initial;
      //加载
    bool UDLLTest::DLL_Init() {
        FString filePath = FPaths::Combine(*FPaths::GamePluginsDir(), TEXT("DLL/"), TEXT("test.dll"));
        if (FPaths::FileExists(filePath)) {
            UE_LOG(LogTemp, Log, TEXT("%s"), *filePath);
            // 绑定dll
            DLLHandle = FPlatformProcess::GetDllHandle(*filePath);
            if (DLLHandle != NULL) {
                DLL_Initial=NULL;
               
                //绑定函数
                FString procName = "Initial"; // dll里的函数名
                DLL_Initial = (_Initial)FPlatformProcess::GetDllExport(DLLHandle, *procName); 
                if(DLL_Initial != NULL){
                    UE_LOG(LogTemp, Log, TEXT("DLL_Initial import succ"));
                    return true;
                }     
            }
        }
        return false;
    }
    
    //释放
    void UDLLTest::DLL_Free() {
        if(DLLHandle !=NULL){
            DLL_Initial = NULL;
            FPlatformProcess::FreeDllHandle(DLLHandle );
            DLLHandle = NULL;
        }
    }
    
  • 方式二 (当使用方法一引用不到 dll 的时候,可以尝试使用该方法)
    SetDllDirectory(*filePath);
    DllHandle = LoadLibrary(TEXT("test.dll"));
    ...
    

运行时依赖性

  • 打包游戏时为在可执行文件旁暂存第三方DLL,可在 build.cs中声明其为运行时依赖性。
    RuntimeDependencies.Add(Path.Combine(PluginDirectory, "Binaries/Win64/Foo.dll"));
    
  • 此操作假设DLL已存在于给定目录中,插件将在该位置手动进行加载。若希望在编译时将DLL复制到可执行文件使用的相同输出目录,可通过重载 RuntimeDependencies.Add 方法执行。
    RuntimeDependencies.Add("$(TargetOutputDir)/Foo.dll", Path.Combine(PluginDirectory, "Source/ThirdParty/bin/Foo.dll"));
    

参考

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值