2012-07-03 23 views
5

En primer lugar, algunos antecedentes:Buscando un multi-plataforma, de extremo a extremo ejemplo de C++ para WPF/Cacao interoperabilidad

He decidido iniciar un nuevo proyecto diseñado desde el principio para ejecutarse en múltiples plataformas (Windows, iOS, OSX, Linux, Android). Como mis antecedentes son principalmente C++, intento escribir la funcionalidad principal usando C++ 11. Habiendo dicho eso, en cada plataforma tendré que escribir una interfaz de usuario específica de la plataforma que pueda interoperar con el núcleo de C++.

La primera plataforma a la que me refiero es Windows (la segunda es iOS). Tendré datos almacenados en una base de datos SQLite, así como datos proporcionados por el usuario que se ingresarán usando un WPF DataGrid (insertando filas, manipulando datos existentes, etc.). Esta es la primera vez que trabajo con WPF (aunque he usado Windows Forms) y la primera vez que trabajo con C++ en un entorno administrado. Planeo hacer de esto una arquitectura de estilo MVC, así que en mi opinión SQLite es el Modelo, WPF es la Vista y el código C++ es el Controlador.

Mi pregunta es la siguiente:

¿Hay ejemplos por ahí que ilustran cómo agarrar los datos de una interfaz de C++ y mostrarlo usando C# y WPF sin destruir/destrozando el código C++ en sí (ya que debe trabajar en múltiples plataformas)? He leído un poquito sobre P/Invoke (tedioso, pero funciona) y ensamblajes mixtos (funciona, ¿pero cambiaré mi C++?) Pero Google no ha sido útil cuando se trata de ejemplos concretos (especialmente los que implican poblar controles WPF con datos obtenidos a través de una DLL C++).

Gracias!

EDITAR: Al buscar soluciones para este problema me encontré con CXXI. No estoy muy familiarizado con él, pero parece que puede ser una solución simple a mi problema. ¿Alguna idea? Mi comprensión de todos estos conceptos es limitada.

+1

No tengo ninguna experiencia WPF, pero puedo decirle que lo que está haciendo va a ser algo difícil. Cuando llegue a la aplicación OS X (y estoy seguro de que iOS es la misma), tendrá que escribir bastante código Objective-C. Creo que depende en gran medida de la naturaleza de la aplicación que estás haciendo, pero básicamente vas a tener que volver a escribir mucho para cada plataforma. – Hassan

+1

Gracias por su contribución Hassan.Sé que tengo mucho trabajo por delante, pero mi objetivo es codificar la interfaz de usuario de forma nativa para cada plataforma. Creo que ofrece la mejor experiencia de usuario, así como la mejor experiencia de aprendizaje :) –

+1

Tienes razón, ofrece la mejor experiencia de usuario. Y si la parte más difícil de la interfaz de usuario es la mesa, entonces diría que estás en buena forma. Espero que alguien realmente responda ahora ... – Hassan

Respuesta

3

Al haber trabajado tanto con XAML como con WinForms, no creo que encuentre que WPF se siente mucho más "nativo" que su experiencia con WinForms. En ambos casos, todo es abstraído por .Net. Pero si quieres aprender WPF, entonces ve por ello.

P \ invoke funciona igual que COM. En cuanto a otras formas de obtener datos de C++ a otros idiomas, considere abordar esto como un problema de IPC en lugar de uno de lenguaje. Ejecute un proceso como el elemento secundario del otro y consulte sockets y bibliotecas como 0mq/clrzmq (see this for 0mq on iPhone - this for Android) y Thrift para que C++ converse con el otro proceso.

Con sockets/0mq, puede usar xml/json/Protobuf/Protobuf-net para serializar y deserializar objetos de un idioma a otro. Con Protobuf, solo tendrá que crear un conjunto de objetos de datos json-esque y usar las herramientas específicas del lenguaje para generar código. Eso hará que sus objetos de datos se ocupen de las plataformas y los idiomas, lo que le permitirá concentrarse en lo divertido. La serialización también funcionará muy bien con sql. Todas estas tecnologías son fáciles de implementar y cada una tiene un puntaje de implementaciones de idiomas, por lo que es sencillo conectar las cosas a su próxima GUI.

En cuanto a los ejemplos, todo depende de cómo quiera mover sus datos entre los tiempos de ejecución.

+0

¿Está sugiriendo que WinForms sea más fácil? Simplemente asumí que WPF DataGrid sería más fácil de trabajar. Me gusta mucho la idea de usar IPC, pero para este proyecto creo que es demasiado complejo y exagerado. Gracias por eso sin embargo. Muy interesante. En este punto, me gustaría encontrar un ejemplo sin depender de un código externo (al menos en tiempo de ejecución). CXXI parece interesante. –

+1

Winforms es mucho más fácil que WPF. Honestamente, creo que sería mejor con Mono para sus GUI de escritorio, pero es su decisión. – 0x1mason

+1

Si fuera yo, iría con Mono o alguna otra capa de abstracción de GUI multiplataforma, pero eso es principalmente porque no disfruto el trabajo de UI;). Dicho esto, aprecio lo que estás tratando de hacer aprendiendo cómo funcionan las cosas en todas las plataformas. Tal vez necesites aclarar a qué te refieres con "nativo": ¿estás más interesado en probar diferentes tecnologías o estás más interesado en conocer los detalles de cada sistema operativo? – 0x1mason

Cuestiones relacionadas