2010-02-02 65 views
0

我有一個與WOsclib的小問題。不是特別在圖書館,它更多的是回調函數。聆聽特定的osc命令,我必須忍受一些回調方法,如Objective-C在C++中 - 超出範圍

void TheOscStartMethod::Method(
          const WOscMessage *message, 
          const WOscTimeTag& when, 
          const TheNetReturnAddress* networkReturnAddress) 
{ 
    std::cout << "Got the start signal"; 
    start.alpha = 1.0; 
} 

start is IBOutlet UIImageView。

但編譯器說我,那開始超出了範圍。如果我嘗試訪問obj-c代碼中的開始,它應該像它應該那樣工作。

我該如何將我的Objective C對象放入c代碼或至少調用一個objective-c函數。

謝謝

+1

你在哪裏申報開始? – MrMage 2010-02-02 17:44:54

回答

0

解決方案:

我不知道這是否是做的最好的方式,但它的工作原理。

必須有一個空的c對象,以後將成爲我們的目標c對象,它包含我們想要訪問的所有東西。

static gsSearchForIp* delegate = NULL; 

我們必須定義一個函數來設置目標對象c

void setCallbackDelegate(gsSearchForIp* del) 
{ 
    delegate = del; 
} 

然後調用它。 (我在initWithFrame方法中調用它)

setCallbackDelegate(self); 

現在我可以在我的C++方法調用的方法與[delegate methodName:firstPara]。在這個函數中,我可以從gsSearchForIp類訪問我需要的所有東西。

1

請與擴展.mm客觀的C++文件,然後就可以調用對象的C和C++對象在同一代碼的文件。

的XCode將調用從文件擴展名的正確的編譯器(即加入-x的Objective-C++的編譯命令)

這並不是說C++和Objective C的是不同的語言和不理解對方的對象,因此移動他們之間的數據,你將需要將數據轉換爲C類型,例如void,char int和指向它們的指針。

+0

哼,我已經這樣做了,不是文件擴展名,而是在信息面板中。它現在看起來像這樣:http://grab.by/28Ld – Philip 2010-02-02 17:33:37

+0

然後我認爲這不是問題。我們需要查看開始類的標題? – Mark 2010-02-02 17:54:02

+0

就像我說的,'start'是一個UIViewImage.maybe我應該選擇一個更好的例子。 「開始」可能是一種方法。 '[self methodName]'也不起作用。 – Philip 2010-02-02 20:12:41

1

聽起來像start是一個屬於某個Objective-C對象的實例變量,並且您試圖通過從C++對象中寫入其名稱來訪問它。如果是這種情況,應該很明顯爲什麼它不起作用:C++對象不知道任何關於start的內容。解決方法是以某種方式爲C++對象提供對擁有start的Objective-C對象的引用。

+0

我很高興知道這是怎麼工作:) – Philip 2010-02-02 20:14:25

+0

我的解釋儘可能具體。對於你如何去做沒有一般的答案。你必須構建你的程序,以便你的代碼知道它需要的數據。這個程序結構具體是什麼樣的,取決於程序的細節,我們在這裏沒有。 – Chuck 2010-02-02 21:22:41

+0

UFF,現在我感覺就像在挖掘我完全不知道的東西。但我們試試吧。 我有一個正常的AppDelegate,其中包含一些按鈕和標籤。這對我來說很好。困難的部分是我正在使用的OSC庫。那個是用C++編寫的,但是與平臺無關。我實現了它,它工作。我可以通過網絡發送接收osc信號。現在,如果我得到一個osc信號,一個特定的方法被稱爲C++方法。那是我的問題開始。我想用這種方法來改變界面。不知道這是否有助於指定我的情況?謝謝你:) – Philip 2010-02-02 23:05:43

0

您必須使起始對象可用於其他代碼。

你可以通過它,你可以傳遞你將要使用的部分,你可以爲兩個代碼庫創建一個API來使用。還有其他的選擇爲好,完全取決於正是你希望如何使用的各種對象