visual studio microsoft how example create crear c++ c winapi visual-c++ dll

studio - ¿Qué tan malo es mezclar y combinar los archivos DLL de tiempo de ejecución de Visual C++ en un proceso?



microsoft dll (1)

Tengo una aplicación que está construida con Visual Studio 2012, y por lo tanto depende de MSVCP110.DLL y MSVCR110.DLL . Estoy usando otro archivo DLL, que parece haber sido creado con Visual Studio 2010 y depende de MSVCP100.DLL y MSVCR100.DLL . Otra DLL más que MSVCR90.DLL con Visual Studio 2008 y depende de MSVCR90.DLL .

¿Esto es malo? Una cosa realmente mala? ¿Deberia estar preocupado? La razón por la que pregunto es que el asignador de almacenamiento dinámico en tiempo de ejecución se queja por la corrupción del almacenamiento dinámico. ¿Podría esto estar relacionado con las versiones de tiempo de ejecución mixtas?


No es seguro mezclar y combinar los tiempos de ejecución de Visual Studio de diferentes versiones del compilador, principalmente porque cada tiempo de ejecución creará su propio montón independiente. Dado que los montones serán totalmente independientes, no puede asignar memoria utilizando 1 montón y liberarla en un montón diferente. Hacer eso corromperá tus montones. La corrupción no suele provocar un bloqueo inmediato, ya que puede que no se pueda acceder a la parte dañada del montón en las próximas asignaciones o desasignaciones, por lo que puede ser muy difícil de depurar.

Para el caso de un solo archivo DLL que tiene un montón diferente de la aplicación, es posible solucionar el problema de una manera muy limitada. Tendría que aislar la dll de modo que todas las asignaciones y desasignaciones de dll ocurran solo dentro de la dll. Y también el aislamiento tendría que ir por el otro lado. La dll no podrá liberar memoria de forma segura de la aplicación sin aislamiento.

Puede encontrar más información sobre la corrupción del montón causada por la mezcla de versiones de CRT aquí: http://siomsystems.com/mixing-visual-studio-versions/