gpt4 book ai didi

c - NSApplicationLoad 在 C 头文件中?

转载 作者:行者123 更新时间:2023-11-30 15:32:18 24 4
gpt4 key购买 nike

我发现我必须调用 NSApplicationLoad 才能获取显示重新配置回调。我的程序是直接用 C 编写的,出于各种原因,我希望避免将 Objective-C 代码添加到我的项目中。

定义 NSApplicationLoad 的 header (Cocoa/Cocoa.hAppKit/AppKit.h)是 Objective-C header ,并且当使用普通的 C 编译器编译时自然会抛出很多错误。

使用简单的 extern void NSApplicationLoad(void) 原型(prototype)调用 NSApplicationLoad 是有效的,而且我的程序确实运行良好。但是,我有点担心这不是一个“正确”的方法,因为感觉我应该包括一些东西。

是否存在包含 NSApplicationLoad 的直接 C header (如 CoreFoundation 或 ApplicationServices header )?如果不是,我当前的方法(仅应用原型(prototype))安全吗?

最佳答案

您可以将 NSApplicationLoad 包装在 C 函数中,并在 C 代码中调用包装函数。

包装器.h

BOOL MyNSApplicationLoad(void);

Wrapper.m(需要是 ObjC 文件以包含 ObjC header )

#include <Cocoa/Cocoa.h>
BOOL MyNSApplicationLoad(void) {
return NSApplicationLoad();
}

一些.c

#include "Wrapper.h"

void foo() {
MyNSApplicationLoad();
}

因此,即使在将来的 SDK 版本中更改了 NSApplicationLoad 的签名,您也会注意到,只需修改包装函数即可。

但是,NSApplicationLoad 不太可能发生更改,因为它是一个记录在案的公共(public) API。只需在头文件之一中声明 BOOL NSApplicationLoad(void) 就足够且安全了。

<小时/>

你可能会注意到,它是 BOOL NSApplicationLoad (void) 而不是 void NSApplicationLoad(void)

关于c - NSApplicationLoad 在 C 头文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297780/

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