Fixed a few bugs.
Updated/improved some older code.
Added an error system similar to Win32's Get/SetLastError().
Went through and updated all of the code to utilize it the error system.
Added support to de/serialize property bags
Added a PropertyFile class (which is pretty much my "config file" class.)
Added a DLL system.
Fixed my ComPointer class (I think lol.)
Fixed my assert macro.
Added support for the performance counter (if available.)
Added a Size3 math symbol and a couple more useful functions.
Adding the DLL system kind of threw things, because, as I said, I didn't want to include windows headers. I can get around this, but I don't know if it's legal to convert a FARPROC to a void pointer (or anything else for that matter) and back.
Another issue I'm not sure about is '__declspec(novtable)'. My understanding was that a class declared with it would not have a vtable, but my class still does (according to my compiler's watch window anyway.)
The only other issue is an...odd memory leak (reported by _CrtDumpMemoryLeaks().) I stripped my code down to just functions (none of which were being called) and the leak would show up SOMETIMES. I could comment out the code, run it, no memory leak. Uncomment the code, run it, no memory leak. Run it again, memory leak. A little confused really, plus the fact that defining _CRTDBG_MAP_ALLOC didn't change the output at all like it's supposed.
One other thing I'm not sure about is how to handle unloading my DLL files. At the moment I have a DllFile class and when it goes out of scope or I call Free(), the library is freed. My test bed code at the moment loads an interface from a DLL using a global DllFile, so when the app exits, the library is freed (which it would be anyway, via Win32), but this reports a memory leak and doesn't seem like the best way to handle it.
Guess I should add this because I've been asked by a couple friends. The toolbox (and all of my projects really) are very Windows oriented. Also, because of how I handle DLL exports, it's very MSVC++ oriented (because of the use of __FUNCTION__ and __FUNCDNAME__, and the linker pragma comment.)