Such irritating program behaviour always gets me interested
I don't have time today to look into this more, so I'll continue tomorrow.
Short roundup of my investigations:
- In wxDevCpp's devpak wx's internal vsnprintf substitute (wxVsnprintf_) seems to be called. That one doesn't know %I64 and just passes it literally.
This is shown by
Code: Select all
cout << wxString::Format( "%"wxLongLongFmtSpec"u", wxULL(2));
Maybe the crash is provoked by the missing va_arg comsumption ("%I64u" not recognized) and interpretation of the unsigned long long pointer as char pointer. This is fairly easy to test, I'll do this tomorrow.
- The question remains why wxVsnprintf_ is called, more specific: why is it only called with the devpaks, but not my own build?
- Also I'm not sure if the missing interpretation of "%I64" is a bug in wx, because it's a Microsoft extension. However, this should be fairly easy to patch in wx. But prior to patching we need to know why the Visual C++ 6's _vsnprintf isn't called. And anyway wx shouldn't crash if it's avoidable.
- Regarding making a devpak: I just followed the instructions in the wiki. I think it's more important to find out what's wrong with the other devpaks (if anything is wrong at all), but if you really need a devpak I guess I could create one.