vector作为参数传递到dll问题
今天写程序的时候要给一个模块的dll传递一个参数,由于参数数量是可变的,因此设计成了vector<string>类型,但调试过程中发现在exe中的参数传递到dll中的函数后,vector变成空的,改成传引用类型后,vector竟然变得很大,并且是无意义的参数。 对于这个问题,两种办法: 1.传递vector指针 2.传递const vector<TYPE>。 究其原因: 是因为vector在exe和dll之间传递的时候,由于在dll内可能对vector插入数据,而这段内存是在dll里面分配的,exe无法知道如何释放内存,从而导致问题。而改成const类型后,编译器便知道dll里不会改变vector,从而不会出错。 或者可以说这是"cross-DLL problem."(This problem crops up when an object is created using new in one dynamically linked library (DLL) but is deleted in a different DLL)的一种吧。 对于STL,在DLL中使用的时候,往往存在这些问题,在网络上搜集了下,这些都是要平时使用STL的时候注意的。 *************************************************************************************************************** 引用http://www.hellocpp.net/Articles/Article/714.aspx 当template 遭遇到dynamic link 时候, 很多时候却是一场恶梦. 2> 3> 模板+动态链接库的使用问题还很多. 要千万留心这个陷阱遍地的东西啊 *************************************************************************************************************************** 微软关于这类问题的解释: You may experience an access violation when you access an STL object through a pointer or reference in a different DLL or EXE http://support.microsoft.com/default.aspx?scid=KB;en-us;q172396 How to export an instantiation of a Standard Template Library (STL) class and a class that contains a data member that is an STL object http://support.microsoft.com/default.aspx?scid=KB;en-us;q168958 |