2010-05-12 63 views
1

我想編譯一個最初爲Cocoa編寫的庫。事情很好,直到它尋找函數marg_setValue()。它說,有在尋找在iPhoneOS中的marg_setValue修復

marg_setValue(argumentList,argumentOffset,char,(char)lua_toboolean(state,luaArgument)); 

字符前一個語法錯誤(它在談論的第三個參數,而不是(焦炭))

我試圖端口LuaObjectiveCBridge到iPhone。它有兩種選擇,使用Runtime或Foundation。我發現基礎存在一些問題,所以我嘗試運行時。但編譯器不合作。

回答

1

檢查,如果你能擺脫marg_XXX宏:

  • 他們已被取消,不被認爲是可靠的。
  • marg_list將與現代運行時中不存在的objc_msgSendv一起使用。

我建議去用NSInvocation。它使用起來相當簡單,而且足夠強大,可用於橋樑。檢查this entry的完整性。

0

Cocoa Touch上提供了現代的Objective-C ABI/API。它缺少32位桌面運行時的一些傳統特性(即那些可怕的脆弱的特性)。

marg_setValue()和朋友是Objective-C 2.0中不支持的遺留運行時的一部分。無論如何,它總是被打破。你不會錯過很多。

真正的問題是:你想要做什麼?看到

+0

擴展問題並回答了您的問題 – 2010-05-13 00:02:50

+0

由於ffi在設備上不可用,所以您幾乎可以使用NSInvocation(Foundation)或滾動您自己的ARM程序集來設置堆棧幀並撥打電話。 – bbum 2010-05-13 03:19:14

+0

marg_setValue仍然是Objective-C API的一部分。至少,它仍然在文件中。請參閱http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/doc/uid/TP40001418-CH1g-BBCHBDJC。無可否認,它沒有出現在我的Mac的聚光燈搜索中。 – JeremyP 2010-05-13 11:08:25