Runtime error when referencing external library in Unreal Engine

主宰稳场 提交于 2019-12-24 20:25:46

问题


I followed the steps from this tutorial:

https://wiki.unrealengine.com/How_to_Link_External_C_Libraries_.dll_.lib_With_Your_Project_%26_Package_With_Game,_Fast_And_Easy

I was able to successively reference the external c++ library and the project compiles just fine. However, at runtime, when I instantiate an object from external library, I get the following error:

Exception thrown at 0x00007FFD7244FD31 (mscordacwks.dll) in UE4Editor.exe: 0xC0000005: Access violation reading location 0x0000000000000000. occurred Source information is missing from the debug information for this module

and the stack is:

mscordacwks.dll!ClrDataAccess::EnumMemDumpAllThreadsStack(enum CLRDataEnumMemoryFlags) Unknown Non-user code. Symbols loaded. mscordacwks.dll!ClrDataAccess::EnumMemoryRegionsWorkerMicroTriage(enum CLRDataEnumMemoryFlags) Unknown Non-user code. Symbols loaded. mscordacwks.dll!ClrDataAccess::EnumMemoryRegionsWrapper(enum CLRDataEnumMemoryFlags) Unknown Non-user code. Symbols loaded. mscordacwks.dll!ClrDataAccess::EnumMemoryRegions(struct ICLRDataEnumMemoryRegionsCallback ,unsigned int,enum CLRDataEnumMemoryFlags) Unknown Non-user code. Symbols loaded. dbgcore.dll!GenGetProcessInfo(unsigned long,struct _MINIDUMP_STATE ,struct _INTERNAL_PROCESS ,struct _LIST_ENTRY *) Unknown Non-user code. Symbols loaded. dbgcore.dll!MiniDumpProvideDump() Unknown Non-user code. Symbols loaded. dbgcore.dll!MiniDumpWriteDump() Unknown Non-user code. Symbols loaded. UE4Editor-Core.dll!00007ffdb17e95fb() Unknown No symbols loaded. UE4Editor-Core.dll!00007ffdb17ded6a() Unknown No symbols loaded. UE4Editor-Core.dll!00007ffdb17d2865() Unknown No symbols loaded. UE4Editor-Core.dll!00007ffdb17e0864() Unknown No symbols loaded. [External Code] Annotated Frame

the line where the error occurs:

CSharpClassExposer* scharpClassExposer = nullptr;
scharpClassExposer = new CSharpClassExposer();

The external library that I am referencing is C++ CLI (managed C++) which further wraps C# dll and I am sure it has something to do with this. However, in my separate test project where I use the same managed library with native c++ console client instead of Unreal Engine, it all works fine.

Any idea how to solve this?


回答1:


I've got stuck with the same issue as yours ( i've got exception from Windows core dlls ) when i called basic method/functions/constructor of external libraries.

I had to tell to the Engine which DLL has to be load, corresponding to the .lib you gave to the array PublicAdditionalLibraries

PublicDelayLoadDLLs is another Array you can access from your Build.cs and you have to fill it with every .dll you want to link.

I've something like this in my Build.cs :

PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "myExternalLiblib")); PublicDelayLoadDLLs.Add("myExternalLib.dll");

Then when your Module is loaded, you have to tell the Engine which DLL it has to load. Eg, In your void MyModule::StartupModule() method you have to set the Libraries folder

FString AbsPath = FileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*MyLibPath); FPlatformProcess::AddDllDirectory(AbsPath)

Then ask to load the library :

void* DLLHandle3 = FPlatformProcess::GetDllHandle( L"myExternalLib.dll" );

These steps fix the Exception thrown when i used some of the external libraries methods.

If i've well understood what i've found on the Unreal Forum, The engine use the .lib to compile and know which function exists, but need the .dll to load dynamically all dependencies not included in the final executable. ( kind of weird for a cpp developer, that's why i'm not sure about this part )

Hope it helps



来源:https://stackoverflow.com/questions/49172258/runtime-error-when-referencing-external-library-in-unreal-engine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!