【问题标题】:Looking for marg_setValue fix in iPhoneOS在 iPhoneOS 中寻找 marg_setValue 修复
【发布时间】:2010-05-12 23:19:45
【问题描述】:

我正在尝试编译一个最初为 Cocoa 编写的库。在它寻找函数 marg_setValue() 之前,一切都很好。它说在 char in 之前有语法错误

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

(这是在谈论第三个参数,而不是 (char) )

我正在尝试将 LuaObjectiveCBridge 移植到 iPhone。它有两种选择,使用 Runtime 或 Foundation。我发现基础存在一些问题,所以我正在尝试运行时。但是编译器不配合。

【问题讨论】:

    标签: objective-c cocoa cocoa-touch lua objective-c-runtime


    【解决方案1】:

    检查您是否可以摆脱 marg_XXX 宏:

    • 它们已被弃用,不被视为可靠。
    • marg_list 将与现代运行时不存在的 objc_msgSendv 一起使用。

    我建议使用NSInvocation。它使用起来非常简单,并且功能强大,足以用作桥梁。检查this entry 的完整性。

    【讨论】:

      【解决方案2】:

      现代的 Objective-C ABI/API 可在 Cocoa Touch 上使用。它缺少 32 位桌面运行时的一些遗留特性(即极其脆弱的特性)。

      marg_setValue() 和朋友是Objective-C 2.0 不支持的遗留运行时的一部分。无论如何,它——总是——坏掉了。你并没有错过太多。

      真正的问题是:你想做什么?

      【讨论】:

      • 扩展问题并回答了您的问题
      • 由于 ffi 在设备上不可用,您几乎可以使用 NSInvocation(Foundation) 或滚动您自己的 ARM 程序集来设置堆栈帧并进行调用。
      • marg_setValue 仍然是 Objective-C API 的一部分。至少,它还在文档中。见developer.apple.com/iphone/library/documentation/Cocoa/…。诚然,它并没有出现在我的 Mac 的聚光灯搜索中。
      • 看看头文件;该 API 被 #if !__OBJC2__ 包围。文档是错误的。已提交错误 (rdar://7980744)。
      猜你喜欢
      • 2020-12-19
      • 2016-12-21
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2017-06-09
      • 2023-04-05
      相关资源
      最近更新 更多