C++ 在非真实引擎中引用外部库时发生运行时错误
我遵循了本教程中的步骤: < >我能够连续引用外部C++库,并且程序编译得很好。但是,在运行时,当我从外部库实例化一个对象时,会出现以下错误: UE4Editor.exe中0x00007FFD7244FD31(mscordacwks.dll)处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000000。数据库中缺少发生的源信息 此模块的调试信息 堆栈是: mscordacwks.dll!ClrDataAccess::EnumMemDumpAllThreadsStack(枚举 CLRDataEnumMemoryFlags)未知的非用户代码。已加载符号。 mscordacwks.dll!ClrDataAccess::EnumMemoryRegionsWorkerMicroTriage(枚举 CLRDataEnumMemoryFlags)未知的非用户代码。已加载符号。 mscordacwks.dll!ClrDataAccess::EnumMemoryRegionsWrapper(枚举 CLRDataEnumMemoryFlags)未知的非用户代码。已加载符号。 mscordacwks.dll!ClrDataAccess::EnumMemoryRegions(结构 ICLRDataEnumMemoryRegionsCallback,无符号整数,枚举 CLRDataEnumMemoryFlags)未知的非用户代码。已加载符号。 dbgcore.dll!GenGetProcessInfo(无符号长,结构\u最小转储\u状态 ,结构内部进程,结构列表条目*)未知非用户 代码。已加载符号。dbgcore.dll!minidumpProvidedImp()未知 非用户代码。已加载符号。dbgcore.dll!MiniDumpWriteDump() 未知的非用户代码。已加载符号。 UE4Editor-Core.dll!00007ffdb17e95fb()未知未加载符号。 UE4Editor-Core.dll!00007ffdb17ded6a()未知未加载符号。 UE4Editor-Core.dll!00007ffdb17d2865()未知未加载符号。 UE4Editor-Core.dll!00007ffdb17e0864()未知未加载符号。 [外部代码]带注释的框架 发生错误的行:C++ 在非真实引擎中引用外部库时发生运行时错误,c++,unreal-engine4,C++,Unreal Engine4,我遵循了本教程中的步骤: < >我能够连续引用外部C++库,并且程序编译得很好。但是,在运行时,当我从外部库实例化一个对象时,会出现以下错误: UE4Editor.exe中0x00007FFD7244FD31(mscordacwks.dll)处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000000。数据库中缺少发生的源信息 此模块的调试信息 堆栈是: mscordacwks.dll!ClrDataAccess::EnumMemDumpAllThreadsStac
CSharpClassExposer* scharpClassExposer = nullptr;
scharpClassExposer = new CSharpClassExposer();
<>我引用的外部库是C++ CLI(管理C++),它进一步封装C ^ dll,我确信它与此有关。然而,在我的测试项目中,我使用同一个托管库,使用了本地C++控制台客户端,而不是虚构引擎。
知道如何解决这个问题吗?当我调用外部库的基本方法/函数/构造函数时,我遇到了与您相同的问题(我从Windows core DLL中得到了例外) 我必须告诉引擎必须加载哪个DLL,对应于你给数组的.lib
PublicAdditionalLibraries
publicdayloaddls
是另一个可以从Build.cs访问的数组,您必须用要链接的每个.dll填充它
我的Build.cs中有类似的内容:
PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath,“myexternalib.lib”);
publicdayloaddls.Add(“myexternalib.dll”)代码>
然后,当加载模块时,您必须告诉引擎它必须加载哪个DLL。例如,在您的void MyModule::StartupModule()
方法中,您必须设置Libraries文件夹
FString AbsPath=
FileManager::Get().ConvertToAbsolutionPathForExternalAppForRead(*MyLibPath);
FPlatformProcess::AddDllDirectory(AbsPath)
然后要求加载库:
void*DLLHandle3=FPlatformProcess::GetDllHandle(L“myExternalLib.dll”)代码>
这些步骤修复了我使用某些外部库方法时引发的异常
如果我已经很好地理解了在Unreal论坛上发现的内容,那么引擎将使用.lib编译并知道存在哪个函数,但需要.dll动态加载最终可执行文件中未包含的所有依赖项。(对于cpp开发人员来说有点奇怪,这就是为什么我不确定这部分的原因)
希望它有帮助当我调用外部库的基本方法/函数/构造函数时,我遇到了与您相同的问题(我从Windows core DLL中得到了例外)
我必须告诉引擎必须加载哪个DLL,对应于你给数组的.libPublicAdditionalLibraries
publicdayloaddls
是另一个可以从Build.cs访问的数组,您必须用要链接的每个.dll填充它
我的Build.cs中有类似的内容:
PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath,“myexternalib.lib”);
publicdayloaddls.Add(“myexternalib.dll”)代码>
然后,当加载模块时,您必须告诉引擎它必须加载哪个DLL。例如,在您的void MyModule::StartupModule()
方法中,您必须设置Libraries文件夹
FString AbsPath=
FileManager::Get().ConvertToAbsolutionPathForExternalAppForRead(*MyLibPath);
FPlatformProcess::AddDllDirectory(AbsPath)
然后要求加载库:
void*DLLHandle3=FPlatformProcess::GetDllHandle(L“myExternalLib.dll”)代码>
这些步骤修复了我使用某些外部库方法时引发的异常
如果我已经很好地理解了在Unreal论坛上发现的内容,那么引擎将使用.lib编译并知道存在哪个函数,但需要.dll动态加载最终可执行文件中未包含的所有依赖项。(对于cpp开发人员来说有点奇怪,这就是为什么我不确定这部分的原因)
希望能有帮助