I have a solution in VS 2008 that creates a DLL. I then use that DLL in another application. If I go in to the DLL projects property pages and change the following configuration for a DEBUG build then the built dll no long provides the desired functionality. If I change it back and rebuild the DLL, then the DLL does provide the correct functionality:
Property Pages => Configuration Properties => C/C++ => Code Generation => Runtime Library
If set to “Multi-threaded Debug DLL (/MDd)”
then everything works as it should. I get the correct functionality from the DLL
If set to “Multi-threaded DLL (/MD)” then the DLL does not function properly…no runtime errors or anything, it just doesn’t work (The DLL is supposed to plot some lines on a map but does not in this mode).
So the question is, why does using the /MDd flag result in correction functionality of the underlying code, while /MD results in incorrect functionality?
A little background…somebody else developed the DLL in C++ and I am using this DLL in a VB.net application.
All DLL’s/debug code generation must match across everything that uses them. There may be another referenced library or object or dll or some code in there that is built using the wrong options; or specific options for an individual element that override the global project options.
The only way of figuring it out is to meticulously check all of the options for each file, checking the included and referenced libraries (.lib and .dll) and object files. Check the linker options too.
The reason why it doesn’t work is probably because the debug version adds extra guard blocks around memory to allow detection of errors.