I did see a few spots where pointers are cast to ints - you’ve got the 64-bit portability compiler warning "#pragma"ed off. There are a couple of places in the code where do it so you can check the alignment. These are all easy to clean up.
The only real architectural tweak I saw was that you have this type defined:
typedef int (MessageCallbackFunction) (void* userData);
A lot of the functions that are used as MessageCallbackFunctions return pointers for window handles or what have you. I was thinking that a good solution would be to define some JUCE-specific cross-platform type that corresponded to LONG_PTR and ULONG_PTR. Say, call it nint and nuint (native int), or whatever else you prefer.
So:
typedef nint (MessageCallbackFunction) (void* userData);
would work nicely.
You can’t use in-line assembly with the AMD64 compiler. Even if you could, the current assembly is 32 bit code. Quite a bit of it could be replaced with either Windows API functions or with the new intrinsics that are available with Visual Studio 2005. The SSE stuff would have to be rewritten.
The other thing I found out was that building this stuff with VS 2003 is fairly painful. It’s much easier with VS 2005, but that’s only in beta. You could do it with the platform SDK and writing your own makefile, but that would be a fair amount of typing.
Visual Studio 6 will export a makefile from a .dsp file, but MS removed that feature from VS 2003. So I guess that would work if someone had VS 6.