我的可执行文件调用了一些我自己编写的DLL。根据这些DLL使用的第三方C++库,我无法自由选择所有DLL的编译器设置。因此,在一些DLL中,_ITERATOR_DEBUG_LEVEL
被设置为2(在调试版本中默认),但是在我的可执行文件_ITERATOR_DEBUG_LEVEL
中,根据严重的性能问题,它被设置为0。如何将C++对象传递给具有不同_ITERATOR_DEBUG_LEVEL的DLL
当我现在将std::string
传递给DLL时,只要DLL尝试将其复制到本地std :: string obj,应用程序就会崩溃,因为DLL中字符串对象的内存布局不同于在我的可执行文件中。到目前为止,我通过传递C字符串来解决这个问题。我甚至写了一个小类,它将一个std::map<std::string, int>
转换为C-Data中的临时表示并将其转换为C-Data中的临时表示,以便将sich数据传递给DLL。这工作。
我该如何克服这个问题?我想传递更多不同的类和容器,并且由于几个原因,我不想与_ITERATOR_DEBUG_LEVEL
= 2一起工作。
摘要:bye bye OO ... – 2011-03-17 14:15:33
完全没有 - 没有stl并不意味着没有OO。您可以使用不包含数据成员的类来创建抽象接口/适配器 - 只有纯虚拟方法。在这里,我发现了一篇有趣的文章:[代码项目:从DLL导出C++类](http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx#CppMatureApproach) – MacGucky 2011-03-17 14:37:17
不,作为客户,您应该**需求**将第三方库编译为可用版本。或者被允许重新编译自己。这不是一个语言问题,这是一个业务问题。谁长期出售无法使用的图书馆? – 2011-03-17 14:40:47