是visualc++;2013与Visual C兼容的二进制文件++;2017二进制文件? 我们的C++解决方案中,我们使用第三个部分库。这些库与VS 2013兼容。现在,我们正在将解决方案迁移到VS 2017,发现一些第三方库没有与VS 2017兼容的版本
因此,我们尝试在VS20173中使用一些与VS2013兼容的库,尝试过的API调用工作正常是visualc++;2013与Visual C兼容的二进制文件++;2017二进制文件? 我们的C++解决方案中,我们使用第三个部分库。这些库与VS 2013兼容。现在,我们正在将解决方案迁移到VS 2017,发现一些第三方库没有与VS 2017兼容的版本,c++,visual-studio,visual-studio-2013,visual-studio-2017,C++,Visual Studio,Visual Studio 2013,Visual Studio 2017,因此,我们尝试在VS20173中使用一些与VS2013兼容的库,尝试过的API调用工作正常 我可以假设这些库与VS 2017可执行文件一起工作没有任何问题吗?一般来说-不,AFAIK、VC++2015(又名工具集v140)和VC++2017(又名工具集v141)声明为二进制兼容。VC++2013中没有这样的声明,我相信有一些突破性的变化(比如sizeof(list)等) 它可能会工作,但可能会导致难以调试的问题 Microsoft声明: “一种更为严重的更改,突破性的更改可能会影响二进制兼容性,
我可以假设这些库与VS 2017可执行文件一起工作没有任何问题吗?一般来说-不,AFAIK、VC++2015(又名工具集v140)和VC++2017(又名工具集v141)声明为二进制兼容。VC++2013中没有这样的声明,我相信有一些突破性的变化(比如sizeof(list)等) 它可能会工作,但可能会导致难以调试的问题 Microsoft声明: “一种更为严重的更改,突破性的更改可能会影响二进制兼容性,但这种二进制兼容性的突破只发生在Visual Studio的主要版本之间。例如,Visual Studio 2013和Visual Studio 2015之间。”
一般而言,请参见第AFAIK、VC++2015(又名工具集v140)和VC++2017(又名工具集v141)声明为二进制兼容。VC++2013中没有这样的声明,我相信有一些突破性的变化(比如sizeof(list)等) 它可能会工作,但可能会导致难以调试的问题 Microsoft声明: “一种更为严重的更改,突破性的更改可能会影响二进制兼容性,但这种二进制兼容性的突破只发生在Visual Studio的主要版本之间。例如,Visual Studio 2013和Visual Studio 2015之间。”
<>(P/>P>>P>>没有保证,但Visual C++编译器的二进制兼容性一般比官方宣布的要好。只需确保不跨不同的运行时创建/销毁对象,传播异常,不将STL相关对象作为参数传递
如果第三方库公开C风格的接口,并将它们编译为DLL,那么任务就更容易了。因此,您应该检查这些接口,并验证它们与通用互操作性指南的差异有多大 > P>没有保证,但Visual C++编译器的二进制兼容性一般比官方宣布的要好。只需确保不跨不同的运行时创建/销毁对象,传播异常,不将STL相关对象作为参数传递
如果第三方库公开C风格的接口,并将它们编译为DLL,那么任务就更容易了。因此,您应该检查这些接口,并验证它们与通用互操作性指南的差异有多大对于C++库,答案是否定的。C库可能会起作用。我会等待有人证明我错了。API输出为函数而不是C++类,如果它们输出C风格API,那么它们是兼容的。注意,“C风格API”不仅仅意味着“API被导出为函数而不是C++类”,而且所有函数都是“ExtEng+C”,只使用C类型作为参数/返回值而不是抛出。@ VTT No,一般来说它们不是。它们一开始有不同的运行时DLL,如果你在用VC++2017编译的应用程序中创建一些简单的东西,比如FILE*,并将其传递给旧库,则无法保证它会工作。只需添加一些其他注释:注意内存管理。不能使用一个运行时支持分配,另一个不能分配。对于C++库,答案是否定的。C库可能会起作用。我会等待有人证明我错了。API输出为函数而不是C++类,如果它们输出C风格API,那么它们是兼容的。注意,“C风格API”不仅仅意味着“API被导出为函数而不是C++类”,而且所有函数都是“ExtEng+C”,只使用C类型作为参数/返回值而不是抛出。@ VTT No,一般来说它们不是。它们一开始有不同的运行时DLL,如果你在用VC++2017编译的应用程序中创建一些简单的东西,比如FILE*,并将其传递给旧库,则无法保证它会工作。只需添加一些其他注释:注意内存管理。不能使用一个运行时支持进行分配,而在另一个运行时支持中取消分配。