Visual studio 2012 管理C+时的不兼容性+;包装器(v110)正在使用本机C++;DLL(v100)
先谢谢你。。。 问题: 有人能帮助我理解,当用C++/CLI编写的包装器(链接到v110,在VS2012中开发)试图使用本机DLL(链接到v100,在VS2010中开发)时,是否存在任何不兼容问题 目标: 我正在开发一个.NET4.0应用程序。我正在使用VS2012作为我的开发环境。这个应用程序必须消耗一些传统的C++原生DLL。为此,我正在编写包装器项目 问题: 在我的包装器中,我将std::vector对象引用作为空容器传递,由本机DLL的API填充。这个API返回的第一个元素非常好,但第二个元素之后,所有元素都是悬空指针?? 请帮助我了解出了什么问题 替代解决方案: 当我在包装器中将项目设置更改为链接v100工具集时,一切都正常 问题:Visual studio 2012 管理C+时的不兼容性+;包装器(v110)正在使用本机C++;DLL(v100),visual-studio-2012,dll,c++-cli,wrapper,Visual Studio 2012,Dll,C++ Cli,Wrapper,先谢谢你。。。 问题: 有人能帮助我理解,当用C++/CLI编写的包装器(链接到v110,在VS2012中开发)试图使用本机DLL(链接到v100,在VS2010中开发)时,是否存在任何不兼容问题 目标: 我正在开发一个.NET4.0应用程序。我正在使用VS2012作为我的开发环境。这个应用程序必须消耗一些传统的C++原生DLL。为此,我正在编写包装器项目 问题: 在我的包装器中,我将std::vector对象引用作为空容器传递,由本机DLL的API填充。这个API返回的第一个元素非常好,但第二
在模块边界上导出C++类对象是一种危险的冒险,没有像从.NET那样的VM中获得的执行保证。确保所有模块都由完全相同的编译器使用完全相同的设置构建,并且CRT的共享副本是一项硬要求。
您使用的是两种不同的std::vector实现。一个来自V100 C++库,另一个来自V110库。C++11语言版本允许的大幅改进确保了它们的不同。当您的包装器试图访问导出的对象和/或在写入时随机损坏它时,它只会读取垃圾。CRT也发生了显著的变化,v110使用了不同的堆,因此在一个模块中分配一个对象并在另一个模块中销毁它这样简单的事情也无法工作在模块边界上导出C++类对象是一种危险的冒险,没有像从.NET那样的VM中获得的执行保证。确保所有模块由完全相同的编译器使用完全相同的设置构建,并且CRT的共享副本是一项硬要求。
std::vector不应成为Dll接口的一部分。读取编译器警告。std::vector不应是Dll接口的一部分。读取编译器警告。