My team lead asked me to assist a junior developer with their compile problems. The team lead tried to help previously. But our software would not build on one developer's new machine.
I took a look at some of the errors. There were calls to bitmap functions, passing in literals like OBM_CHECKBOXES. I searched around and found these were defined in "winuser.h". That file should be getting included I thought.
So I went and traced how "winuser.h" gets included. I found that it all starts with "stdafx.h", and eventually get included from "windows.h". Then I saw that these header files were present and included on the new machine. They were.
Upon closer inspection of "winuser.h", the literals are only defined if you have already defined OEMRESOURCES. I went through the exercise again finding how OEMRESOURCES gets defined on my machine. It is part of the project. Turns out the new machine had a project file which failed to define OEMRESOURCES for the debug build. Getting a correct project file solved this problem.
The details of the debugging are not important. The process is important. I did most of the investigation along side our junior developer. Hopefully some of this is rubbing off. Next step is to debug why another project fails to build on the machine due to missing DLL dependencies. Fun stuff.
A Little Bit of Crypto - I have been trying to figure out to "collision resistant" some of these standard hash functions are. It is a tough concept to get my head around. I figure...