在 D 中动态绑定 extern(Objective-C) 类
Dynamically Bind extern(Objective-C) Classes in D
我想在我的 D 应用程序中大量使用 extern (Objective-C)
类,因为我不想手动发送 Objective-C 消息。但是,我主要使用 AppKit、IOKit 和 Foundation 等框架,并且 extern (Objective-C)
需要静态 linking 才能根据 documentation.
工作
但是,我不认为静态 linking OS 库是个好主意。考虑到不同的 macOS 版本时,它似乎非常脆弱。
所以我的问题是,
- 静态 link Foundation 和 AppKit 实际上是个坏主意吗?
- 如果是,那么是否可以使用
dlopen
动态加载 .framework 文件,然后将函数指针绑定到 extern (Objective-C)
类?
没有。我认为这不是问题,这是相对标准的做法。当然,您将无法在同一个二进制文件中为(比如说)macOS 和 iOs 构建,但这种情况很少见。如果您 dlopen
个框架,您可能会发现它们有时也会在 macOS 版本中移动。 Apple 将 不时有其他方法来破坏您的向后兼容性,但删除您的框架并不常见。
您将成为 extern(Objective-C).
的首批幸运用户之一
是的,这绝对有可能。但是你必须直接与 ObjC 运行时对话,因为自 OSX 以来没有函数被导出,只有 类 ID。您必须为要调用的每个方法编写一些脆弱的代码。从协议继承是非常困难的。你真的不能那样做。从好的方面来说,它在 DMD 和 LDC 中的工作原理相同。您可以签到 dplug:cocoa
。我真的建议改用 extern(Objective-C) 和静态链接。
我想在我的 D 应用程序中大量使用 extern (Objective-C)
类,因为我不想手动发送 Objective-C 消息。但是,我主要使用 AppKit、IOKit 和 Foundation 等框架,并且 extern (Objective-C)
需要静态 linking 才能根据 documentation.
但是,我不认为静态 linking OS 库是个好主意。考虑到不同的 macOS 版本时,它似乎非常脆弱。
所以我的问题是,
- 静态 link Foundation 和 AppKit 实际上是个坏主意吗?
- 如果是,那么是否可以使用
dlopen
动态加载 .framework 文件,然后将函数指针绑定到extern (Objective-C)
类?
没有。我认为这不是问题,这是相对标准的做法。当然,您将无法在同一个二进制文件中为(比如说)macOS 和 iOs 构建,但这种情况很少见。如果您
的首批幸运用户之一dlopen
个框架,您可能会发现它们有时也会在 macOS 版本中移动。 Apple 将 不时有其他方法来破坏您的向后兼容性,但删除您的框架并不常见。 您将成为 extern(Objective-C).是的,这绝对有可能。但是你必须直接与 ObjC 运行时对话,因为自 OSX 以来没有函数被导出,只有 类 ID。您必须为要调用的每个方法编写一些脆弱的代码。从协议继承是非常困难的。你真的不能那样做。从好的方面来说,它在 DMD 和 LDC 中的工作原理相同。您可以签到
dplug:cocoa
。我真的建议改用 extern(Objective-C) 和静态链接。