Re: STL compatibility in MS VS 2003/2005
Jenny wrote:
We have developed a dll in MS Visual Studio .Net 2003 using unmanaged C++.
The interface of this dll is std. Internally the dll is mixed with
C/C++/MFC libraries. The dll runs well with a testing stub which imports
this dll. Of course, the testing stub is developed in the same platform
and IDE.
When we ship this dll to our customer side, the customer's application is
developed in MS Visual Studio .NET 2005. They have problem to access all
std::string returned from our exported dll interface.
In general, you can't mix code from different C++ compiler. The same applies
to different versions (VC7.1, VC8) and settings (debug/release). A good
approach is to use auto-linking (#pragma comment...) and supply different
DLLs for different compilers and settings. Take a look at how e.g. Boost
names their libraries for an example.
Strangely enough, if std::string is embedded within a struct and returned
from the dll interface, our customers release version application works
with our dll, but not debug version.
The VC8 standardlibrary has a special diagnostic mode to find common errors
which versions before didn't have. This makes this incompatible in debug
mode. Note that there is no guarantee that in release mode they are
compatible, it might be just that you didn't find any problems yet!
Uli