B) From what SmkViper says, it sounds like I can't make a 64 bit program recognize a 32 bit DLL. That can't be right though, because what if I need a program to be 64 bit, but use a 32 bit DLL? Or what if I need a program to use 2 different DLLs and one is 64 bit and the other is 32 bit and I can't recompile them because I don't have the source? There would have to be a way to do this.
64-bit processes can't load 32-bit DLLs, and vice versa. All EXEs/DLLs loaded into the process must match.
The exception is that .Net's "Any CPU" DLLs can be loaded into 64-bit or 32-bit processes because the JIT can generate the appropriate code either way.
.Net's "Any CPU" EXEs, on the other hand, will start a 64-bit process if your OS is 64-bit, or a 32-bit process if the OS is 32-bit, but any DLLs loaded thereafter have to match the bit size the EXE picked.
If you don't have proper versions of all DLLs and don't have the source code, you have to go with the bitness that you have available (32-bit, in most cases). When making a .Net EXE which loads 32-bit DLLs, you have to make sure to change the .Net projects to target x86 instead of "Any CPU".