2012-07-03 9 views
5

In primo luogo, alcuni retroscena:Alla ricerca di un cross-platform, end-to-end esempio di C++ per WPF/cacao interoperabilità

ho deciso di avviare un nuovo progetto progettato dalla terra fino a girare su molteplici piattaforme (Windows, iOS, OSX, Linux, Android). Poiché il mio background è principalmente C++, intendo scrivere la funzionalità di base utilizzando C++ 11. Detto questo, su ogni piattaforma avrò bisogno di scrivere un'interfaccia utente specifica per piattaforma che possa interagire con il core C++.

La prima piattaforma a cui mi rivolgo è Windows (la seconda è iOS). Avrò i dati memorizzati in un database SQLite e i dati forniti dall'utente che verranno inseriti utilizzando un DataGrid WPF (inserendo righe, manipolando i dati esistenti, ecc.). Questa è la prima volta che lavoro con WPF (sebbene abbia usato Windows Form) e la mia prima volta che lavoro con C++ in un ambiente gestito. Ho intenzione di creare un'architettura in stile MVC, quindi nella mia mente SQLite è il modello, WPF è la vista e il codice C++ è il controller.

mia domanda è questa:

Ci sono esempi là fuori che illustrano come per afferrare i dati da un C++ dell'interfaccia e visualizzarlo utilizzando C# e WPF senza distruggere/pressare il codice C++ in sé (in quanto deve lavorare su più piattaforme)? Ho letto un po 'di P/Invoke (noioso, ma funziona) e assemblaggi misti (funziona, ma mangerò il mio C++?) Ma Google non è stato utile quando si tratta di esempi concreti (specialmente quelli che riguardano la populazione dei controlli WPF con dati ottenuti tramite una DLL C++).

Grazie!

EDIT: Durante la ricerca di approcci a questo problema mi sono imbattuto in CXXI. Non ho molta familiarità con esso, ma sembra che potrebbe essere una soluzione semplice al mio problema. qualche idea? La mia comprensione di tutti questi concetti è limitata.

+1

Non ho alcuna esperienza WPF, ma posso dirti che quello che stai facendo sarà un po 'difficile. Quando si arriva all'app OS X (e sono sicuro che iOS è lo stesso), si dovrà scrivere un bel po 'di codice Objective-C. Penso che dipenda in gran parte dalla natura dell'app che stai facendo, ma fondamentalmente dovrai riscriverne gran parte per ogni piattaforma. – Hassan

+1

Grazie per il tuo contributo Hassan.So di avere molto lavoro davanti a me, ma il mio obiettivo è codificare l'interfaccia utente in modo nativo per ogni piattaforma. Sento che offre la migliore esperienza utente e la migliore esperienza di apprendimento :) –

+1

Hai ragione, offre la migliore esperienza utente. E se la parte più difficile dell'interfaccia utente è il tavolo, allora direi che sei in buona forma. Spero che qualcuno in realtà risponda ora ... – Hassan

risposta

3

Avendo lavorato con XAML e WinForms, non penso che troverai WPF per sentirti molto più "nativo" dell'esperienza WinForms. In entrambi i casi, tutto è astratto da .Net. Ma se vuoi imparare WPF, allora fallo.

P \ invoke funziona perfettamente come COM. Per quanto riguarda altri modi per ottenere dati dal C++ in altre lingue, considera l'approccio come un problema IPC piuttosto che uno di linguaggio. Eseguire un processo come figlio dell'altro e cercare sockets e librerie come 0mq/clrzmq (see this for 0mq on iPhone - this for Android) e Thrift per ottenere C++ che comunica con l'altro processo.

Con prese/0mq, è possibile utilizzare xml/json/Protobuf/Protobuf-net per serializzare e deserializzare oggetti da una lingua all'altra. Con Protobuf, avrai solo bisogno di creare un set di oggetti dati json-esque e usare gli strumenti specifici di langauge per generare codice. Questo si prenderà cura dei tuoi oggetti dati attraverso piattaforme e linguaggi, permettendoti di concentrarti sulle cose divertenti. La serializzazione funzionerà bene anche con sql. Tutte queste tecnologie sono facili da implementare e ognuna ha una serie di implementazioni linguistiche, rendendo semplice collegare le cose alla prossima GUI.

Per quanto riguarda gli esempi, tutto dipende da come si desidera spostare i dati tra i tempi di esecuzione.

+0

Stai suggerendo che WinForms potrebbe essere più facile? Ho appena pensato che il WGrf DataGrid sarebbe stato più facile da usare. Mi piace molto l'idea di utilizzare IPC, ma per questo progetto penso che sia eccessivamente complesso e eccessivo. Grazie per quello però. Molto interessante. A questo punto mi piacerebbe ancora trovare un esempio senza fare affidamento su codice esterno (almeno in fase di esecuzione). CXXI sembra interessante. –

+1

Winforms è molto più semplice di WPF. Onestamente, penso che faresti meglio con Mono per le tue GUI desktop, ma è la tua chiamata. – 0x1mason

+1

Se fossi in me, andrei con Mono o qualche altro livello di astrazione dell'interfaccia grafica multipiattaforma, ma questo è principalmente dovuto al fatto che non mi piace l'interfaccia utente;). Detto questo, apprezzo ciò che stai cercando di imparare imparando come funzionano le cose su tutte le piattaforme. Forse hai bisogno di chiarire cosa intendi per "nativo" - sei più interessato a provare diverse tecnologie o sei più interessato a fare i conti con tutti i sistemi operativi? – 0x1mason

Problemi correlati