I had a simple Win32 application fail to create its window (in my case, a dialog box, using either CreateDialog
or DialogBox
). I got back the error 0x583; unable to create window class. If I forced the window style on my dialog to create regardless of errors, my dialog was empty.
It turns out I was using themed controls in my manifest, but I didn’t call InitCommonControls
. After that, my application worked.
Month: July 2021
There is no 64-bit type in C89
Brief post, but I was porting a C89 project to Visual C++ 6 (don’t ask) when I found something really fun. Turns out “long long
“, the type everyone assumes is the 64-bit type in C, is actually a GCC extension. MSVC uses… _int64
, a different extension. Great, had to convert a bunch of code. You’ll get this fun error from old MSVC when it sees it:
error C2632: 'long' followed by 'long' is illegal
(Note that MSVC will probably assume your C code is C++, which does mean you get some stuff from C99 for free like single-line comments… but then initializers are different between C and C++, and C++ only added long long
in C++11…)
It’s an unfortunate gotcha for those who assume they’re writing standards compliant C89. The reason might be deflated when you have to define your own 64-bit integer with #ifdef
. Oh, and let’s not forgot “long long” could mean 72-bit on your 9-bit byte system, of course. That’s why stdint.h
exists…. except, oh, C89.