我有一个使用Visual Studio 2002 C(v7.0)编译器和Intel Fortran 9.0.018编译器编译和链接在一起的C和Fortran例程的静态可链接库。
我的库中的C代码调用并链接到Microsoft C-RunTime(MSCRT)2002静态库(单线程)。我相信2002年CRT库的实际版本号是v7.0
我将此静态库称为“vs2002if9.lib”
我是否可以安全地使用任何更高版本的Visual Studio(2003,2005或2008)静态链接到我的“vs2002if9.lib”,而不用担心调用程序在C运行时调用方面的行为如何?
或者我是否通过混合CRT静态库的版本来创建问题?
如果我向第三方软件开发商提供“vs2002if9.lib”怎么办?我对他们施加了什么要求?
答案 0 :(得分:2)
混合C运行时在过去对我来说并不起作用。我可以看到这个工作{only}的唯一方式是,如果你完全隔离静态链接的C-Runtime边界内的堆栈/堆的使用[没有通过参数跨越边界但是你的vs2009if9是什么值.lib提供]。
例如,如果您要在应用程序中分配指针[堆内存]并将此指针传递给您提供的库,应该使用哪个堆管理器?正确的答案是管理指针的堆管理器,但是您的库不会知道另一个堆管理器。如果您的库分配内存以供应用程序使用,那么它会变得更加丑陋,应用程序有责任使用提供的指针来释放/删除(错误的设计是,但仍然可能)。同样,将使用错误的堆管理器。