Pregunta

¿Es posible utilizar una biblioteca estática C ++ (Lib) compilado con Visual Studio 6 en Visual Studio 2008?

¿Fue útil?

Solución

No debería pensar por qué no - siempre y cuando mantenga los límites de memoria CRT habituales (es decir, si se asigna memoria dentro de una función de biblioteca, siempre libre desde el interior de la biblioteca - llamando a una función en el lib para hacer el liberación).

Este enfoque funciona bien para las DLL compiladas con todo tipo de compiladores, librerías enlazadas estáticamente deben estar bien también.

Otros consejos

En realidad depende. ¿El lib exponer sólo 'extern 'C'' funciones donde la memoria está bien gestionado por métodos Win32 rectas (CoTaskMemAlloc, etc.) o de la persona que llama no libera la memoria asignada por el destinatario de la llamada o viceversa? ¿Sólo se basan en las bibliotecas básicas que no han cambiado mucho desde VS 6? Si es así, que debe estar bien.

Hay 2 cosas básicas a tener en cuenta. Los cambios en las variables globales utilizadas por las bibliotecas 3 ª parte, y los cambios en la estructura de clases, estructuras, etc definida por aquellas bibliotecas 3 ª parte. Por ejemplo, el asignador de memoria CRT probablemente ha cambiado sus estructuras de gestión de asignación ocultos entre las 2 versiones, por lo que tener una versión de la biblioteca de asignar una parte de memoria y tener otra conexión que probablemente causará un accidente.

Como otro ejemplo, si expone clases de C ++ a través de la interfaz y que se basan en las bibliotecas de tiempo de ejecución MS como MFC, hay una posibilidad de que el diseño de clases ha cambiado entre VS 6 y VS 2008. Eso significa que el acceso a un miembro / campo de la clase podría ir a la cosa incorrecta y producir resultados impredecibles. Probablemente esté regado si el .lib utiliza MFC en cualquier capacidad. MFC define como internamente utiliza toneladas de variables globales, y cualquier acceso a variables globales de MFC por las operaciones en el .lib podría causar fallos si la infraestructura MFC ha cambiado en el entorno de alojamiento (que ha cambiado mucho desde VS 6, por cierto).

No he explorado exactamente lo que se hicieron cambios en los encabezados de MFC, pero he visto un comportamiento impredecible entre los binarios de clase MFC / ATL basado en recopilados en diferentes versiones VS.

Además de estas cuestiones, hay un riesgo para funciones como strtok () que se basan en variables globales estáticos definidos en las bibliotecas de tiempo de ejecución. No estoy seguro, pero me preocupa esas variables estáticas no pueden quedar inicializado correctamente si utiliza un cliente esperando el CRT de un solo subproceso en un hilo creado en el CRT multi-hilo. Mira la documentación de _beginthread () para obtener más información.

Sí. No debe haber ningún problema con esto en absoluto. Como gbjbaanb mencionado, es necesario recordar su memoria, pero todavía tendrá VS2008 trabajar con él. Mientras usted no está tratando de mezclar CLR, (administrado) código con él. Me gustaría recomendar en contra de que si es posible. Pero, si usted está hablando de C cruda o código C ++, seguro, que va a trabajar.

¿Qué es exactamente lo que planeando sobre el uso? (¿Qué hay en esta biblioteca?) ¿Lo has probado ya, pero está teniendo problemas, o simplemente estás comprobando antes de perder un montón de tiempo tratando de conseguir algo para trabajar que apenas no?

seguro de que va a trabajar.

¿Usted está preguntando dónde en VS2008 para codificar las referencias?

Si es así, vaya a proj puntales -> Enlazador -> Entrada de las propiedades de configuración en las páginas de propiedades. Busque "dependencias adicionales" y el código de la .LIB allí.

Ir a proj puntales -> Enlazador -.> General y el código de la ruta de bibliotecas en "directorios de librerías adicionales"

Esto debería hacerlo !!

Hay casos fueron la respuesta es no, cuando nos mudamos de VS6 a VS2k5 tuvimos que reconstruir todas nuestras bibliotecas, ya que el modelo de memoria había cambiado, y las funciones CRT cuando sean diferentes.

Había un puñado de romper los cambios entre VC6, VS2003, VS2005 y VS2008. Visual C ++ (en VS2005) detuvo apoyo para la biblioteca de una sola rosca, enlazado estáticamente CRT. Algunos cambios de ruptura enumerado aquí y aquí . Estos cambios tendrán un impacto en el uso de bibliotecas VC6 construidos en versiones posteriores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top