我正在将Nvidia Blast桥接到Unity,当PhysX尝试延迟加载PhysX3CommonDEBUG_x64.dll
时,我遇到了以下错误:
Unhandled exception at 0x00007FFDD7743FB8 (KernelBase.dll) in Unity.exe:
0xC06D007E: Module not found (parameters: 0x00000000005FC5B0).`
我能够将这个桥接程序作为一个独立的控制台应用程序运行(在更改项目类型之后),但在Unity内部运行PhysX初始化会导致崩溃(这里是Unity的堆栈跟踪):
0x00007FFF4F543FB8 (KERNELBASE) RaiseException
0x00007FFEF0840835 (PhysX3DEBUG_x64) [f:\dd\vctools\delayimp\delayhlp.cpp:323] __delayLoadHelper2
0x00007FFEF0669011 (PhysX3DEBUG_x64) _tailMerge_physx3commondebug_x64_dll
0x00007FFEF051CDA4 (PhysX3DEBUG_x64) [c:\users\jesse\documents\github\physx-3.4\physx_3.4\source\physx\src\npfactory.cpp:67] physx::NpFactory::NpFactory
0x00007FFEF051D6ED (PhysX3DEBUG_x64) [c:\users\jesse\documents\github\physx-3.4\physx_3.4\source\physx\src\npfactory.cpp:122] physx::NpFactory::createInstance
0x00007FFEF0545721 (PhysX3DEBUG_x64) [c:\users\jesse\documents\github\physx-3.4\physx_3.4\source\physx\src\npphysics.cpp:269] physx::NpPhysics::createInstance
0x00007FFEF0544DAA (PhysX3DEBUG_x64) [c:\users\jesse\documents\github\physx-3.4\physx_3.4\source\physx\src\npphysics.cpp:831] PxCreateBasePhysics
0x00007FFF18D37FA3 (Fractre) [c:\users\jesse\documents\github\blast\compiler\fractre\fractre.cpp:60] Initialize
我可以定义确认PhysX3CommonDEBUG_x64.dll
和所有其他dll都存在于插件目录中(如Unity所期望的那样),并且当它们丢失时会有投诉,但现在它们已被解决了。
我还运行了Window's System File Checker,但没有发现完整性问题。
答案 0 :(得分:0)
确认插件目录中存在PhysX3CommonDEBUG_x64.dll和所有其他dll(如Unity所期望的那样)
Unity期望的并不重要。当您使用/DELAYLOAD
链接器标志与本机DLL链接时,不是Unity谁正在加载该DLL - Windows确实如此。
Here’s a documentation。您可以调用a special API来指定自定义DLL位置但小心处理,如果有人会欺骗您的应用加载该DLL的黑客版本而不是正确的DLL,可能会产生安全后果。
结合其他笔记。确保您使用的是正确的体系结构,即Unity项目和PhysX都是64位。还要确保PhysX3CommonDEBUG依赖的任何DLL也可用于LoadLibrary。
答案 1 :(得分:0)
以下三种有效的解决方案(自PhysX 4.1起):