2011-01-12 36 views
3

我有一個相對複雜的C++應用程序的源代碼,涉及大量的庫,依賴關係等。我試圖拿它並添加一個Cocoa GUI。我目前失敗瞭如下:如何將複雜的C++ XCode項目轉換爲Cocoa應用程序?

  • 創建一個新的Cocoa xcodeproj並嘗試將所有庫等移動到Cocoa應用程序中。我無法建立它。無論我做什麼,都會有成千上萬的錯誤。我的技能不足以弄清楚發生了什麼。

所以,我在想,一個更簡單的方法必須是要對C++ xcodeproj適當的修改,以使main()函數發起的NSApplication,而不是不管它是正確的,現在做的事情。

有誰知道我必須做什麼,確切地說,要做到這一點?我是可可的新手,所以我不確定要添加什麼。作爲參考,C++應用程序的main.cpp中其實是非常簡單的:

int main() { 
    ofSetupOpenGL(320,300, OF_WINDOW); 
    ofRunApp(new testApp()); 
} 

我希望做的是讓所有正確的變化,使這可以是:

#import <Cocoa/Cocoa.h> 

int main(int argc, char *argv[]) { 
    return NSApplicationMain(argc, (const char **) argv); 
} 

而且具有舊的xcodeproj編譯所有「東西」仍然在其中,然後當它運行時,打開Cocoa窗口。

需要注意的是,C++ xcodeproj似乎完全沒有與Cocoa相關的,甚至Objective-C相關的內容,因此我們必須添加所有相關的內容並進行所有相關更改。

任何想法? (或者,或者,如果您知道我可以輕鬆地從C++ xcodeproj中獲取所有內容以構建一個乾淨的Cocoa xcodeproj,請告訴我,但此時對我來說這似乎更加複雜。)

謝謝!

+0

爲相關性添加了Xcode標記。 – Maxpm 2011-01-12 21:13:28

+0

@ MikeC8,你使用Objective-C++嗎?如果不是,那麼沒有什麼可行的。如果您使用Obj-C++,則需要將文件更改爲`.mm`而不是`.cpp`。另外,試試這個閱讀材料[這裏](http://en.wordpress.com/tag/cvsobjc/)在Obj-C++上確實沒有很好的指南。 – 2011-01-12 21:58:04

回答

1

嗯,我有兩個想法...

  1. 你真的需要可可? Mac支持可以與QT,wxWidgets等一起添加。
  2. 您不必將每個C++行轉移到Objective-C++。 Objective-C++可以輕鬆處理C++代碼,您只需更改.cpp - > .mm,然後重寫一些相對於UI的代碼。我認爲,這裏最好的方法是從XCode創建一個空白的Cocoa應用程序,並逐步填充舊代碼。首先讓你使用Cocoa應用程序的OpenGL東西,而不是轉移C++代碼重命名文件。

提示: 您可以覆蓋你的代碼的某些部分與「空白報關單」,即定義一個空超時空的,而不是真正的功能,把一些空白類與空的方法,如果他們真的有必要。讓所有的東西編譯是這裏的第一步和大步。當編譯完成時 - 將真實代碼的另一部分放入項目並修復它以進行編譯。

不幸的是,我不知道更好的解決方案。我幾次重新計算了大型項目,每次在每個平臺和編程語言中,配方都是一樣的。祝你好運!

0

我正在寫一個類似的應用程序,但我打算它是跨平臺的(Mac主要是Windows)我將後端故意保留爲C++庫。然後,我將提供適合的前端GUI(Mac上的Cocoa和Windows上的MFC)。沒有轉換要做 - 你只需要整合你已有的東西。

1

很有可能,如果你不知道C++或類似的可可,這將不會順利進行。

否則,大多數過渡將是單調的,如果你知道你在做什麼。否則,準備學習一些關於objc的東西。

第一:不要把功能正常的C++程序的實現轉換爲objc。這是一個巨大的時間浪費。你只需包裝,綁定和改變程序以在該上下文中操作。你不必寫objc中的所有東西。

第二:你必須編寫一些objc綁定/包裝來使用C++程序。你會做一些包裝,特別是對於UI元素和用戶事件。

第三:源代碼應該按原樣編譯。你只需將它們添加到你的新可可模板項目中,如果它有一個可識別的C++擴展名,gcc默認將它編譯爲一個cpp文件。要使用C++和objc,請使用objC++ FILENAME.mm(您也可以使用.M,但也不支持該功能)。甚至更好,將原始的cpp源代碼放到應用程序鏈接到的單獨的庫中。

第四:現在你有一個可可項目模板和編譯cpp源代碼,添加包裝/綁定,以便可可事件/繪圖在該上下文中執行。根據您的示例代碼,您的起點使用Open GL,因此如果您需要Cocoa應用程序,則必須使用類似於NSOpenGLView的內容。你需要實現什麼取決於項目。

你的主要函數應該調用NSApplicationMain,那麼你寫入綁定到C++代碼的初始條目可能是事件處理,NSWindow,NSView和NSApplication。

如果您是objc的新手,您可能會有一些提升。

0

即使這是一箇舊帖子,我還沒有看到這個答案。

您的代碼

int main() { 
    ofSetupOpenGL(320,300, OF_WINDOW); 
    ofRunApp(new testApp()); 
} 

貌似開放式架構的代碼。爲什麼不下載Open Frameworks Mac XCode版本here,並嘗試將源代碼放入其示例項目之一中。例如OpenGL flockingExample?

相關問題