"load_file:Invalid access to memory location" means one and only one thing, in the XS DLL, or any dependency DLL which has not been loaded before (kernel32, advapi32, perl51*.dll for example were already loaded so they can not be the cause), a DllMain
of the new in the process DLL, had a SEGV/access violation, when it was called from LoadLibrary/Dynaloader. Windows instead of crashing the process, traps the access vio and returns FALSE to the caller (Dynaloader) of LoadLibrary and sets Win32 LastError correct and that is what you see here.
, IDK if it will help you identify which particular DLL crashed or not the tree of dependencies. The other choice is a C debugger which will ideally answer the problem in a few seconds.
Win32 specific XS modules rarely define a DllMain, and portable XS modules never will, but all DLLs have a DllMain placed by the C compiler, usually to initialize various clib/crt features or hook OS thread creation for TLS reasons.