我有一个 Mac 应用程序,由于我无法控制的各种原因,我必须针对 Mac OS 10.4 SDK 构建它。鉴于我的应用程序的最低操作系统版本为 10.5。(我知道,我知道......但我不能提供比上述更多的细节来证明为什么会这样。)
在 Mac OS 10.5 SDK 中有一个 API,FSMatchAliasBulk
我在 10.4 SDK 中找不到一个好的等价物。知道我将在 Mac OS >= 10.5 上运行,我如何才能FSMatchAliasBulk
在运行时访问?
我有一个 Mac 应用程序,由于我无法控制的各种原因,我必须针对 Mac OS 10.4 SDK 构建它。鉴于我的应用程序的最低操作系统版本为 10.5。(我知道,我知道......但我不能提供比上述更多的细节来证明为什么会这样。)
在 Mac OS 10.5 SDK 中有一个 API,FSMatchAliasBulk
我在 10.4 SDK 中找不到一个好的等价物。知道我将在 Mac OS >= 10.5 上运行,我如何才能FSMatchAliasBulk
在运行时访问?
首先,通过从 Xcode 帮助菜单中选择“开发人员文档”来查看 Xcode 帮助中的“交叉开发如何工作”。在文档窗口中,输入“How Cross-Development Works”并点击返回。在那里你会看到更多信息。
这就是我认为您需要做的事情:加载 CoreServices 框架,然后如果您知道您在 Mac OS X 10.5 上运行,则获取该函数的函数指针(查看格式塔功能以确定这一点)。
这是一个未经测试的示例,但应该会引导您朝着正确的方向前进:
CFBundleRef systemBundle = NULL;
short result = LoadFrameworkBundle(CFSTR("CoreServices.framework"), &systemBundle);
if (result == 0) {
typedef OSStatus (FSMatchAliasBulkProcPtr) (const FSRef*, unsigned long, AliasHandle, short*, FSRef*, Boolean*, FSAliasFilterProcPtr, void*);
FSMatchAliasBulkProcPtr myFSMatchAliasBulk = (FSMatchAliasBulkProcPtr) CFBundleGetFunctionPointerForName(systemBundle, CFSTR("FSMatchAliasBulk"));
if (myFSMatchAliasBulk) {
// call FSMatchAliasBulk
OSStatus status = myFSMatchAliasBulk(....);
}
}