Missing .dll for Engine Module in packaged builds

Hello all! I’m looking for help with an error that is only occurring for us in Packaged Builds. We are writing a plugin and have created a sample app that uses the plugin. We get an exception during load of streamed assets, in the constructor of a helper class we authored that depends on nVidia’s nvTextureTools module. The exception is:

Unhandled exception at 0x00007FFC32A4CD29 (KERNELBASE.dll) in UEMinidump.dmp: 0xC06D007E: Module not found (parameters: 0x000000B13CF77BC0)

The crash dump shows that we are dying in Microsoft’s delayhlp.cpp, where delayLoadHelper2 is attempting to load “nvtt_64.dll” in order to construct an instance of “nvtt::InputOptions”.

  1. We do have nvTextureTools listed as a dependency in our plugin’s core module

  2. The package manifest file “Manifest_NonUFSFiles_Win64.txt” does show as having both
    in the package.

  3. nvtt_64.dll files exist in package subdirectory Engine\Binaries\ThirdParty\nvTextureTools\Win64 and Engine\Binaries\ThirdParty\nvTextureTools\Win64\AVX2

I’m wondering if there’s a step we’re missing, either to add the .dll to a dictionary of .dlls that can be loaded by the package, or another driver that nvtt_64.dll depends on, or to load it earlier in the startup process.

I got things to work by manually forcing the packaged build to load nvtt_64.dll by adding the following code to our core module’s StartupModule():

FString nvttPath = FPaths::EngineDir() / TEXT("Binaries/ThirdParty/nvTextureTools/Win64/nvtt_64.dll");
void* nvttModule = FPlatformProcess::GetDllHandle(*nvttPath);

Really not sure why this is necessary / what’s breaking with the delay load system, as nvTextureTools does add its dll to the PublicDelayLoadDLLs list. Seems like a messy workaround, so if anyone has a better solution, I’m happy to hear it.