Primero, no tome su código C++ nativo que funciona y compílelo como C++/CLI. Obtendrás resultados horribles En segundo lugar, no tome su código nativo de C++ y trate de traducirlo a C#, al mismo tiempo que observe los lugares para usar las Bibliotecas de clase base, cambie su técnica de acceso a datos y ajuste su paradigma de interfaz de usuario de MFC a WPF. Gastarás MUCHA energía para producir, en el mejor de los casos, lo que tenías antes.
En su lugar, tome su código C++ nativo que funciona y refactorícelo para que tenga una o más bibliotecas de "lógica de negocios". Si ya existen, podrían tener interfaces COM, podrían exponer algunas funciones de tipo "C externo" o podrían exponer algunos métodos de instancia de C++. Sin preocupaciones. Si no existen, tienes dos opciones. Si solo hay un puñado de métodos necesarios para la capa de presentación, y toman cosas simples como cadenas, coloque algunas funciones "C externas" en el lugar como puertas de entrada a la lógica de negocios. Ahora puede llamar a aquellos desde la interfaz de usuario administrada (VB o C#, Windows Forms o WPF, lo que sea) utilizando P/Invoke. Si hay muchos y desea organizarlos, o si necesitan tomar estructuras complejas u objetos, escriba una clase C++/CLI o clases que puedan hablar con las clases nativas de C++ tal como están, al tiempo que exponen clases de "clase de referencia pública". a la interfaz de usuario administrada. C++/CLI simplificará los cálculos y los problemas de por vida.
Para su nueva IU, escríbala desde cero, llamando a la lógica de negocio cuando sea necesario. Use la interfaz de usuario anterior solo como una guía para las capacidades que necesita y para las validaciones. Use la "apariencia y sensación" de su nueva tecnología UI (WPF o lo que sea) para construir la interfaz de usuario y no intente una conversión mecánica. Acabarás persiguiendo píxeles y trabajando más de lo necesario si te mantienes demasiado cerca de la vieja interfaz de usuario. La aplicación anterior tenía 3 botones y una casilla de verificación. Genial, 3 botones de aspecto WPF y una casilla de verificación de aspecto WPF. ¿Cambia a una cinta mientras estás haciendo el cambio? Multa. Está bien verse diferente cuando termines.
A continuación, implementa sus bibliotecas nativas de lógica de negocios, compiladas como código nativo, su envoltorio C++/CLI, si tiene uno, y su interfaz de usuario administrada. Esto funcionará para cualquier cosa excepto el teléfono.
Solo tengo que volver a decir que NO porte su lógica empresarial C++ nativa en C# como parte de la fase inicial del proyecto. Cuando esté listo y funcionando, si tiene una buena razón comercial (como que ya no queremos gastar dinero en desarrolladores de C++), entonces puede considerarlo. Pero primero hazlo funcionar usando la interoperabilidad. Esto tiene la ventaja de que si su traducción arruina la delicada lógica de negocios escrita por personas que ya no están con usted, confiando en las sutilezas de C++ que su equipo actual desconoce, puede recurrir a las bibliotecas integradas por el resto de sus días.
@all: más detalles sobre mis productos VC++, este producto consiste en la mayoría de los conceptos de OOP basados en COM con Objective C implementados, esto es casi 17 años de desarrollo de producto. Lo que esencialmente significa mucho código con muchos de los componentes. Recientemente, mi cliente me pidió que le diera una propuesta para fusionar todo este producto y su funcionalidad con la existencia de otro producto .NET y mejorar esas características. – KSH
@all: Esto nos obligó a pensar en un enfoque para abordar el problema. La planificación para identificar COM individuales o DLL que están en VC++ y que pueden ser directamente/a través de la envoltura utilizada dentro de .NET funciona. Planea tocar estos módulos solo cuando sea necesario. Además de la planificación para llevar a cabo la reescritura completa de la interfaz de usuario con nuevos elementos de marco. Más sugerencias sobre UI/Código/conceptos ayudarían a obtener más conocimiento. – KSH