init.log is so uselessly short I'll just paste it here: [...]
The last entry ("FILE Cat") comes from the EXE, apparently after reading or otherwise dealing with the
catalogCiv4BeyondSword...dat files in the file cache folder. That and the "Mod Loaded" message get written after the DllMain and global static constructor calls (so those are OK apparently) and before the CvXMLLoadUtility constructor call. Before any further messages, the progress bar for loading XML should appear. Yup, pretty useless.
Eh, never say never. I'm willing to give it a shot tomorrow.
Well, you sound like you know (how to find out) what you're getting into. I suppose you wouldn't have to bother with the compiler from 2003 because you don't need to compile the debug DLL yourself. So perhaps it's not that much trouble. If you can't get it to work, maybe
GenerateCrashDumps=1 in
CivilizationIV.ini can help. That said, if the crash, ultimately, occurs in
msvcr71.dll ...

If it does work, it will show a dialog and then attempt to write a ca. 3 MB file
Civ4BeyondSword.exe.dmp to the Windows temp folder, which I could then debug in Visual Studio. (The "full dump" is much larger, but wouldn't be needed.)
I'm attaching a DLL with debug symbols, assertions enabled and tracing output in the CvXMLLoadUtility constructor, LoadPlayerOptions, LoadGraphicOptions and CvGlobals::init functions. Somehow
fprint and
fprintf(stderr,...) don't write to the Visual Studio console; no idea where their output ends up. So I'm trying OutputDebugString (writes to the VS console) and assertion popups (both through WinBase.h

) instead. The MessageLog isn't available that early.