I also had this problem with different runtime libraries between my EXE and DLL, the ONLY soultion I found was to make everything Multithreaded DLL (Debug or Release), then everything worked again.

The runtimes have static variables, tables, etc. that need to be shared between the EXE & DLL when you are creating an object in one and processing it in the other. If both are static libraries, they will each have their own copy but they do NOT share so you still have the problem.

Just remember that now everything will use the DLLs, you MUST make sure the DLLs are available when you install on another computer. This is usually only an issue if you try to distribute the Debug version (of the EXE or DLL). Use the dependancy walker to get a list of all DLLs required for the EXE and DLL you create.