我用C++编写的应用程序是用Visual Studio 2010构建的,它需要链接到两个外部动态库。其中一个库是用VS 2010构建的(这里没有问题),但另一个库则是用VS 2012构建的。这个计划行得通吗?这是常见的吗?将使用不同编译器版本构建的库链接到应用程序中,而应用程序本身可能是使用不同编译器构建的。如果这不起作用,或者不鼓励这种做法,我想了解在这种情况下是什么阻碍了互操作性。
如果导出的函数使用'C'接口,并且参数/返回类型是通用的Windows API类型,如LONG
、DWORD
、TSTR
、BOOL
等或指向这些类型的指针,那么使用使用不同版本的Visual Studio创建的DLL应该不会有问题。
就我个人而言,我已经用VS2010构建了DLL,并使用这些指南将其用于用VS6.0构建的应用程序。
但是,如果DLL的导出函数传递了STL或MFC类型等类型,或FILE
等类型,则会出现问题,因为编译器版本之间的类型不同。你别无选择,只能确保你的应用程序和DLL的VS版本匹配。