Pregunta

Estoy utilizando VS2008 para el desarrollo de una DLL COM que por defecto utiliza la versión 9 CRT pero yo estoy usando TSF (marco servicio de texto) que no es compatible con el nuevo CRT. Creo que la solución es utilizar el modo compatible cómo puedo especificar la versión CRT?

¿Fue útil?

Solución

Me entero de todo corazón uno a la recomendación no para cambiar manualmente la versión de CRT se vincula en contra. Sin embargo, si por alguna razón (que no puedo imaginar) este es el curso de acción correcto para usted, la manera de hacerlo es cambiar el manifiesto para su proyecto.

En primer lugar asegurarse de que un manifiesto es no generada en cada generación (en VS2005: Propiedades de configuración de archivos / enlazador / Manifiesto / Generar manifiesto), ya que sobrescribir los cambios manuales. También asegúrese de que hay que el aislamiento está activado. A continuación, localice el archivo de manifiesto - debería estar en el $ (IntDir) (por ejemplo, depuración). Debería ver una sección similar a -

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>

(Para versiones de depuración, por supuesto). Hay que editar la versión y atributos publicKeyToken del elemento CRT. Puede inspeccionar los archivos a la carpeta local WINDOWS \ WinSxS para ver las versiones disponibles. Compruebe aquí cómo extraer el publicKeyToken una vez que encuentre la versión que desea. (Aunque me primero tratar de buscar directamente en los manifiestos de otros proyectos, que une en contra de su versión de CRT se desea).

Si tienes que ir allí, esperar un poco de agua áspera. Es posible que tenga un poco de suerte si su aplicación es una aplicación de consola que no está asociada contra otros componentes Side-by-Side (MFC, OpenMP, etc.). Si su aplicación no es trivial, Me sorprendería si no hay alguna versión dependencias intrincados AMONT los componentes SxS.

(editar) También había necesidad de distribuir con la aplicación de la CRT específica que esté utilizando. Aquí está alguien que hizo eso.

Otros consejos

La forma más fácil será crear el archivo DLL con la versión de VC ++ que utiliza el CRT que es compatible con TFS.

No creo que es una buena idea sólo para vincular el archivo DLL con una versión diferente de la CRT, a menos que también utiliza la misma versión de los archivos de cabecera. Y la manera más fácil de hacerlo será utilizar la versión correcta de VC ++ ...

Si todavía quiere probar, se puede:

  • vaya a "Configuración de configuración-> Linker-> input-> Ignorar biblioteca específica" y entrar en el CRT que está utilizando (libc.lib, LIBCMT.LIB, etc. ver esto proyecto de código de artículo para más detalles).
  • Introduzca el nombre de la versión de la CRT que desee utilizar en "Configuración> configuración- Linker-> Input-> dependencias adicionales", y su ruta en "Configuración> configuración- Linker-> General-> directorios de librerías adicionales".

También puede tratar de cambiar los directorios por defecto en "Herramientas-> Opciones-> Proyectos y Solución> VC ++ directorios-> archivos de la biblioteca". Tal vez el cambio de $ (VCInstallDir) lib a la ruta en la que otra versión de reside el CRT hará el truco

No trate de usar VS9 y enlace a otra versión de CRT.

Si necesita que su aplicación para enlazar a otro CRT, dicen CRT de VS8, a continuación, se debe compilar y enlazar su aplicación en esa versión de VS.

La solución funcionó para mí con Visual Studio Express 2013 x64 + x64 OpenCV 2.4.9 compilado, depuración (I integrado que en LV2013 x64), pero debería funcionar para cualquier otro VS-version:

1) Haga clic en su Solución> Propiedades> Depurar archivos de origen ...

2) tal vez hay dos entires (dependiendo de su directorio-instalación-VS) ... C: \ Archivos de programa (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ atlmfc C: \ Archivos de programa (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ crt

Con éstos que funcionaría para Visual Studio 2013 Express, pero también debería funcionar para otra de 2013. Si usted tiene Visual Studio 10 o 11 sólo tiene que escribir "Microsoft Visual Studio 11.0" o 10.0 en cada uno. También se puede simplemente añadirlos.

Estas entradas se pueden obtener de su OpenCV.sln bajo Solución> Propiedades> Depurar archivos de código fuente (como se describe más arriba). Y como ya lo describen:. CRT debe coincidir ... y esto sucede en ese lugar

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