I don't see how you referenced the "DLL" (actually, the assembly, the notion of "DLL" is not essential in CLI), so I am not sure what's wrong.
I would advise to re-reference this assembly.
First, removed the reference. Then, make sure you add all inter-depending project in one solution. Now, you want to use you assembly in one or more projects. Add the reference, and, in the "Add Reference" Window, use, the "Projects" tab. This will take care of automatically correct assembly reference even if you change the project's properties.
[EDIT]
I just noticed that one of the projects is compiled to 64-bit and another in 32-bit. This is impossible. You can never use assemblies compiled to different instruction-set architectures in one process.
First of all, there is no such thing as 64-bit architecture. It is either x86-64 or IE64 (Itanium), they are incompatible to each other, and each of them should be compatible with actual target CPU. Not so with x86. It is compatible with all architecture and uses WoW64 on 64-bit Windows:
http://en.wikipedia.org/wiki/X86[^],
http://en.wikipedia.org/wiki/X86-64[^],
http://en.wikipedia.org/wiki/Itanium[^],
http://en.wikipedia.org/wiki/WOW64[^].
What to do? First of all, I have no idea why do you compile project for concrete architecture. The very best "architecture" is "Any CPU". Use it in all cases, when you don't have very special reason to use the concrete architecture. (You only need to use concrete architecture is some native code is involved, for example, via P/Invoke). "Any CPU" is compatible with any of the concrete architecture, but two different concrete architectures cannot leave together, ever.
"Any CPU" is possible because .NET is based in JIT compilation. Your compilers produce IL code which is compiled to native instruction set during runtime:
http://en.wikipedia.org/wiki/JIT-compilation[^].
—SA