Soy desarrollador de Windows, estoy usando Microsoft visual studio 2008 SP1. Mi máquina de desarrollo es de 64 bits.AnyCPU/x86/x64 para la aplicación C# y su dependencia C++/CLI
El software en el que estoy trabajando actualmente es .exe administrado escrito en C#. Lamentablemente, no pude resolver todo el problema únicamente en C#. Es por eso que también desarrollé una pequeña DLL administrada en C++/CLI. Ambos proyectos están en la misma solución.
Mi objetivo de compilación de C# .exe es "Cualquier CPU". Cuando mi objetivo de compilación de C++ DLL es "x86", el archivo DLL no se carga. Por lo que entendí cuando busqué en Google, el motivo es el lenguaje C++/CLI, a diferencia de otros lenguajes .NET, se compila en el código nativo, no en el código administrado.
Cambié el objetivo de compilación de C++ DLL a x64, y todo funciona ahora. Sin embargo, AFAIK todo dejará de funcionar tan pronto como mi cliente instale mi producto en un sistema operativo de 32 bits. Tengo que admitir Windows Vista y 7, versiones de 32 y 64 bits de cada uno de ellos.
No quiero volver a los 32 bits. Las 250 líneas de código C++ en mi archivo DLL son solo el 2% de mi código base. Y esa DLL solo se usa en varios lugares, por lo que en el escenario de uso típico ni siquiera está cargada.
Mi DLL implementa dos objetos COM con ATL, por lo que no puedo usar la configuración de proyecto "/clr:safe".
¿Hay manera de configurar la solución y los proyectos de manera que C# proyecto se basa "Cualquier CPU" versión, el proyecto de C++ se basa ambas versiones 32 bits y 64 bits, a continuación, en el tiempo de ejecución cuando el .EXE administrado está empezando arriba, usa DLL de 32 bits o DLL de 64 bits dependiendo del sistema operativo?
¿O tal vez hay alguna solución mejor que no conozco?
¡Gracias de antemano!
¿Hay una razón por la que no puedes simplemente distribuir dos versiones, una para x86 y otra para x64? –
¿Estás seguro de que estás compilando C++ a CLI? – tgiphil