我用 C++ 编写的应用程序是用 Visual Studio 2010 构建的,它需要链接到两个外部动态库。其中一个库是用 VS 2010 构建的(这里没有问题),但另一个库是用 VS 2012 构建的。这个方案行得通吗?这是常见的——将使用不同编译器版本构建的库链接到应用程序中,而应用程序本身可能是使用不同编译器构建的。如果这行不通或者不鼓励这种做法,我想了解在这种情况下是什么阻碍了互操作性。
最佳答案
如果导出的函数使用“C”接口(interface),并且参数/返回类型是通用的 Windows API 类型,例如 LONG
、DWORD
、TSTR
、BOOL
等或指向这些类型的指针,那么使用用不同版本的 Visual Studio 创建的 DLL 应该没有问题。
就个人而言,我已经使用 VS 2010 构建了 DLL,并将其与使用 VS 6.0 构建的应用程序一起使用,并遵循这些指南。
但是,如果您的 DLL 的导出函数传递诸如 STL 或 MFC 类型或诸如 FILE
之类的类型,那么您就会遇到问题,因为这些类型因编译器版本而异。您别无选择,只能确保您的应用程序和 DLL 的匹配 VS 版本。
关于c++ - VS 2012 与 VS 2010 的互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26048889/