2012-07-03 53 views
5

首先,一些背景:尋找一個跨平臺的C++終端到終端的例子WPF /可可互操作性

我已經決定要開始一個新項目從一開始就在多個運行設計平臺(Windows,iOS,OSX,Linux,Android)。由於我的背景主要是C++,因此我打算使用C++ 11編寫核心功能。這就是說,在每個平臺上,我需要編寫一個可以與C++內核互操作的特定於平臺的UI。

我所瞄準的第一個平臺是Windows(第二個是iOS)。我將在SQLite數據庫中存儲數據以及用戶提供的數據,這些數據將使用WPF DataGrid(插入行,操作現有數據等)輸入。這是我第一次使用WPF(雖然我使用過Windows窗體),而且我第一次在託管環境中使用C++。我打算讓這個MVC風格的架構,所以我認爲SQLite是Model,WPF是View,而C++代碼是Controller。

我的問題是這樣的:

是否有在那裏任何舉例說明如何從C++接口獲取數據,並使用C#和WPF而不破壞/重整C++代碼本身(因爲它必須在多個工作顯示它平臺)?我已經閱讀了關於P/Invoke(單調乏味,但作品)和混合程序集(作品,但會破壞我的C++?)的一小部分內容,但Google對於具體示例(特別是涉及填充WPF控件的示例通過C++ DLL獲得數據)。

謝謝!

編輯:當尋找解決這個問題的方法時,我遇到了CXXI。我不是很熟悉它,但它似乎可能是我的問題的簡單解決方案。有什麼想法嗎?我對這些概念的把握是有限的。

+1

我沒有任何WPF經驗,但我可以告訴你,你在做什麼會有些困難。當你到達OS X應用程序(並且我確信iOS是相同的)時,你將不得不編寫相當多的Objective-C代碼。我認爲這在很大程度上取決於您製作的應用程序的性質,但基本上每個平臺都必須重新編寫大部分應用程序。 – Hassan

+1

感謝您的輸入哈桑。我知道在我面前有很多工作,但我的目標是爲每個平臺本地編寫UI。我覺得可以提供最好的用戶體驗以及最好的學習體驗:) –

+1

您說得對,它提供了最好的用戶體驗。如果UI中最難的部分是桌子,那麼我會說你的狀態很好。我希望有人現在實際回答... – Hassan

回答

3

與XAML和WinForms一起工作後,我認爲你不會覺得WPF比你的WinForms體驗更「原生」。在這兩種情況下,所有的東西都被.Net抽象出來。但是如果你想學習WPF,那就去做吧。

P \ invoke和COM一樣正常。至於從C++獲取數據到其他語言的其他方式,考慮將其作爲一個IPC問題而不是一種語言。運行一個進程作爲另一進程的子進程,查看sockets和庫,例如0mq/clrzmqsee this for 0mq on iPhone - this for Android)和Thrift以使C++與其他進程交談。

使用套接字/ 0mq,您可以使用xml/json/Protobuf/Protobuf-net來將對象從一種語言序列化並反序列化爲另一種語言。使用Protobuf,您只需創建一組json-esque數據對象並使用特定語言的工具生成代碼。這將處理跨平臺和語言的數據對象,讓您專注於有趣的東西。序列化也可以很好地與sql一起工作。所有這些技術都很容易實現,並且每種技術都有一定的語言實現,因此可以很容易地將事物連接到下一個GUI。

關於示例,這完全取決於您希望如何在運行時間之間移動數據。

+0

你是否建議WinForms可能更容易?我只是假設WPF DataGrid最容易使用。 我真的很喜歡使用IPC的想法,但對於這個項目,我認爲它太複雜和矯枉過正。謝謝你,雖然。很有意思。 在這一點上,我仍然希望找到一個不依賴外部代碼的例子(至少在運行時)。 CXXI看起來很有趣。 –

+1

Winforms比WPF容易得多。老實說,我認爲你最好用Mono作爲你的桌面GUI,但這是你的電話。 – 0x1mason

+1

如果是我,我會選擇Mono或其他跨平臺的GUI抽象層,但這主要是因爲我不喜歡UI工作;)。這就是說,我很欣賞你試圖通過學習跨平臺的工作方式來做什麼。也許你需要澄清你的意思是什麼「本地化」 - 你對嘗試不同的技術最感興趣嗎?或者你最想要了解每個操作系統的細節? – 0x1mason