gpt4 book ai didi

c++ - 在 MAC OS X 中从 C++ dylib 调用 cocoa/obj-c 方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:14 24 4
gpt4 key购买 nike

由于我是 Objective-C 编程语言的新手,我面临着一个巨大的问题:如何从我的动态加载库(用 C++ 制作)中调用我的应用程序(用 Objective-C 制作)的方法,通过给它传递一些参数?

我已经在网上挖掘了几天,但运气不佳。我唯一找到的是关于 IMP 的信息,但我不确定这是否是我需要的。

最佳答案

实际上,您在这里有很多选择。

  1. 如果 dylib 是您自己的,您可以将其编译为 Mac OS X 的 Objective-C++ 和 #ifdef objective-C 调用(如果您只针对 Mac OS,则不编译)
  2. Obj-C 和 C++ 都可以使用 C 接口(interface),所以你可以用 C 编写一个适配器层(记住 Obj-c 是 C 的严格超集)并将它公开给 dylib 以调用 C 函数,然后调用 Obj-C 代码。
  3. 您可以使用 Blocks , 它适用于 C、C++,当然还有 Obj-C
  4. 您可以包含 objective-c 运行时(参见 documentation)并处理它(这是您将使用您提到的 *IMP 的地方)。
  5. 另一个选择可能是从 Cocoa 端使用 Objective C++ 来设置 C++ 对象并将它们暴露给 dylib。您将如何处理这件事实际上取决于库是什么以及它的使用方式等;我们需要更多地了解 dylib 以及如何使用它来对此进行详细说明。

既然您特别提到了使用 IMP,那么让我们更深入地讨论一下。声明是 typedef void (*IMP)(id self, SEL _cmd, ...); 您可以看到它带有一个指向 Obj-C 对象的指针,以及一个 SEL(选择器),它只是该方法的一种特殊 C 字符串表示。您可以在 documentation 中阅读有关 SELIMP 的更多信息.

您还可以使用运行时的 C 函数(例如 objc_msgSend)通过传递指向对象的指针和 SEL 来调用方法,就像 IMP.

这应该足以帮助您入门。顺便说一句,感谢这个问题,我以前从未真正坐下来思考过将 C++ 与 Objective-C 结合的所有可能方法。很可能我什至错过了一些东西 ;)

关于c++ - 在 MAC OS X 中从 C++ dylib 调用 cocoa/obj-c 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26018621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com