2008-11-12 6 views
6

Desarrollo software de cliente enriquecido en Mac OS X y Linux. Deseo portar una aplicación a Windows y no ser usuario de los productos de Microsoft, no estoy muy familiarizado con Windows en general.¿Qué API de Windows elijo para una aplicación de cliente enriquecido?

Lo que estoy familiarizado con:

En Mac OS X, no tengo la opción de Cacao y Objective C o carbono y C/C++. En Linux, tengo la opción de GTK + y C/C++ o Qt y C++. Prefiero Cocoa en Mac OS X y GTK + en Linux. Interface Builder para Cocoa y Glade para GTK + me facilita la vida. Es diversión para crear clientes ricos en estos sistemas operativos.

Mis clases principales, o "modelo" en MVC, están escritas en C++ multiplataforma. Las clases de interfaz de usuario, o "vista y controlador" en MVC, están escritas en el idioma "preferido" y la API GUI para cada plataforma respectiva.

C++ es el lenguaje con el que estoy más familiarizado. Yo uso las bibliotecas de Boost extensivamente. Punteros, hilos y bibliotecas de redes asio especialmente inteligentes. Para Unicode, Localization, etc., uso International Components for Unicode (ICU).

Pregunta 1: ¿Cuál es el idioma "preferido" y la API GUI para la plataforma Windows que es compatible con mis clases de modelos multiplataforma?

Pregunta 2: ¿Cómo accedo a mis clases de modelo multiplataforma?

Por ejemplo, en Mac OS X, puedo acceder a mis clases de modelo a través de clases de controlador. Las clases de controlador se implementan en Objective-C++. Objective-C++ es una combinación de C++ y Objective-C. Ver objetos "hablar con" objetos del controlador en Objective-C mientras el controlador objeta objetos del modelo "hablar con" en C++.

En Linux, todas las clases se implementan en C++.

Respuesta

1

GTK + funciona perfectamente en Windows. Si ya estás familiarizado con eso, eso es lo que usaría. Aunque el rendimiento probablemente no coincida con el de las librerías nativas de Windows UI, como MFC, es lo suficientemente bueno a menos que su aplicación realmente dependa del rendimiento del usuario. Un gran ejemplo del uso de GTK + para todas las plataformas es Pidgin.

Realmente no puedo responder su segunda pregunta sin ver un código, pero no veo por qué difiere de su enfoque de modelo-vista-controlador en otras plataformas.

+0

bien, no sirve de nada escribir código solo de Windows cuando puede mantenerlo en forma de cruz. por supuesto, preferiría Qt sobre GTK + (¡sin sobrecarga de rendimiento, o empate de GUI!), pero la pregunta ya mencionaba que le gustaba GTK +, así que simplemente guárdalo. – Javier

1

Windows Presentation Foundation (WPF) es el nuevo estándar de aplicaciones enriquecidas de Microsoft para Windows. Su C++ le dará acceso a él, pero la mayoría de las personas desarrollan C# contra él.

2

Si puede obtener su C++ para compilar con la cadena de herramientas de Visual Studio (en lugar de gcc o mingw), le recomendaría mucho que haga una .lib y luego la vincule a un ensamblado de C++/CLI donde exponga un API administrada a tu biblioteca.

Luego puede usar C# y WinForms API o WPF y tener una aplicación de búsqueda nativa extremadamente rica. Este trabajo es bastante directo y si está dispuesto a reescribir la GUI, obtendrá el mejor resultado y será la más fácil de implementar.

Una advertencia es si necesita que funcione en máquinas donde .NET podría no estar presente; de ​​ser así, me quedaría con .NET 2.0 (y WinForms). También debe hacer que su instalador lo detecte e instale. Si está dispuesto a instalar .NET 3.5 si no está presente, vaya a WPF.

4

No hay realmente un lenguaje "preferido" y API en Windows, más como muchas opciones. Los más obvios son las llamadas directas de Win32 dirigidas al sistema operativo (así que realmente solo las llamadas de C), o una abstracción delgada encima de eso (por ejemplo, WTL, Biblioteca de plantillas de Windows, que es C++), o una abstracción más gruesa (por ejemplo, MFC, también C++).

Microsoft actualmente está presionando bastante duro WPF, pero eso es parte del mundo .NET administrado. Puedes escribir C++ en eso, así que puedes portar tu aplicación, pero esperaría que sea un esfuerzo significativo.

Dado que está utilizando GTK + o QT en Linux, lo más obvio sería considerar el uso de ambos en Windows, ya que ambos existen, de esa manera podría mantener las versiones de Linux y Windows casi idénticas. No son opciones natuales para una aplicación solo para Windows, ya que no son originarias del mundo de Windows, pero dado su fondo tendrían mucho sentido. Es posible que deba dedicar algún tiempo a ajustarlos para que la aplicación de Windows se vea y se sienta bien, pero eso debería ser más que compensado por la falta de necesidad de escribir una nueva capa de presentación.

4

Qt funciona bien con Windows. Además, es plataforma independiente.

0

Me estoy inclinando hacia Windows Presentation Foundation. Supongo que es la respuesta de Microsoft a Cocoa en Mac OS X en la medida en que "apunta a unificar varios servicios de aplicaciones: interfaz de usuario, dibujo 2D y 3D, documentos fijos y adaptables, tipografía avanzada, gráficos vectoriales, gráficos de trama, animación, enlace de datos , audio y video." Eso suena como cacao para mí :-)

supongo que la aplicación sería similar a mi aplicación de Mac OS X:

  • Modelo: multiplataforma C++ clases
  • Vista: WPF y C#
  • controlador: C++/CLI o algo más

Considerando que, en Mac OS X, clases de vista se implementan en Objective-C, mientras que las clases de controladores se implementan Objective-C++. Ver objetos "hablar con" objetos del controlador en Objective-C mientras el controlador objeta objetos del modelo "hablar con" en C++.

¿Es C++/CLI en Windows como Objective-C++ en Mac OS X o son clases de C# Defino inaccesible en C++/CLI?

¿Cuál es la forma "correcta" o "preferida" de acceder a las clases de C++ desde un lenguaje .Net administrado?

+0

Construiría la vista C# en un ensamblaje y llamaría a otro ensamblado creado en C++/CLI. Puede construir sus clases de C++ multiplataforma en el conjunto C++/CLI de varias maneras, por ejemplo, vinculando los archivos de objeto como una biblioteca nativa estática, o compilando el código fuente en el código administrado. – tragomaskhalos

Cuestiones relacionadas