STL跨平台调用会出现很多异常,你可以试试.
STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。
原因分析:一 句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出跨执行单元访问它的代码。 除非你能够确定两个动态库使用的 都是同样的STL实现,比如都使用VC同一版本的STL,编译选项也一样。强烈建议,不要在动态库接口中传递STL容器!!STL不一定不能在DLL间传递,但你必须彻底搞懂它的内部实现,并懂得为何会出问题。微软的解释:http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b172396微软给的解决办法:http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b1689581、微软的解释:大 部分C++标准库里提供的类直接或间接地使用了静态变量。由于这些类是通过模板扩展而来的,因此每个可执行映像(通常是.dll或.exe文件)就会存在 一份只属于自己的、给定类的静态数据成员。当一个需要访问这些静态成员的类方法执行时,它使用的是“这个方法的代码当前所在的那份可执行映像”里的静态成 员变量。由于两份可执行映像各自的静态数据成员并未同步,这个行为就可能导致访问违例,或者数据看起来似乎丢失或被破坏了。可能不太好懂,我举个例子:假如类A有个静态变量m_s,那么当1.exe使用了2.dll中提供的某个A对象时,由于模板扩展机制,1.exe和2.dll中会分别存在自己的一份类静态变量A.m_s。这 样,假如1.exe中从2.dll中取得了一个的类A的实例对象a,那么当在1.exe中直接访问a.m_s时,其实访问的是 1.exe中的对应拷贝(正确情况应该是访问了2.dll中的a.m_s)。这样就可能导致非法访问、应当改变的数据没有改变、不应改变的数据被错误地更 改等异常情形。原文:Most classes in the Standard C++ Libraries use static data members directly or indirectly. Since these classes are generated through template instantiation, each executable image (usually with DLL or EXE file name extensions) will contain its ow