Strategie per il porting di un'applicazione da API Win32 a GTK +

2

Ho un'applicazione legacy scritta in C, utilizzando l'API Win32 non elaborata. Il livello generale di astrazione è basso e la dipendenza non elaborata da < windows.h > è comune.

Vorrei portare questa applicazione a GTK +. Esistono qualche tipo di linee guida o best practice su come farlo? In precedenza ho portato su Qt un'applicazione MFC, ma l'applicazione era molto astratta: ad esempio, disegnava il proprio insieme di widget, e il porting iniziale era molto semplice.

All'inizio ho pensato di usare Winelib per costruire un eseguibile nativo di Linux e poi provare a rifattorizzarlo lentamente in una GTK + app.

Qualcuno ha le migliori pratiche o esperienze precedenti da condividere su questo?

    
posta Vitor Py 15.02.2011 - 23:35
fonte

1 risposta

3

Non mescolare le due cose. Vuoi portare la tua applicazione su GTK + e vuoi portarla su Linux. Lascia la parte Linux per dopo, sarà più facile alla fine.

Ho appena condiviso la mia esperienza personale su un'applicazione C ++ MFC in cui il refactoring iterativo si è rivelato un incubo a causa del codice specifico Win32 intricato e del comportamento dell'applicazione principale.

Per prima cosa, non abbiamo provato a creare un'applicazione Linux. Nel nostro primo passaggio refactor abbiamo tentato di eliminare le dichiarazioni di classe dal codice specifico di Win32. Quando non è possibile, abbiamo creato classi di astrazione. Ad esempio, se una classe stava mantenendo un handle HWND in una finestra, abbiamo creato una classe MyWindow per incapsulare HWND .

Poi abbiamo iniziato a ridisegnare tutte le parti dell'interfaccia usando Glade (indirizzando GtkBuilder al posto di libglade che credo sia deprecato) senza scrivere una singola riga di codice.

Infine, abbiamo riscritto l'applicazione stessa, incollando i membri della classe e le implementazioni quando possibile. In questo passaggio, MyWindow conterrà un GtkWindow , e alla fine diventerà un GtkWindow quando possibile.

È stato doloroso ma non abbiamo potuto pensare a un modo migliore per farlo al momento. Ancora non è possibile.

    
risposta data 09.03.2011 - 12:37
fonte

Leggi altre domande sui tag