在运行时获取指向Carbon API的过程指针
我有一个Mac应用程序,我必须根据MacOS10.4SDK构建,原因很多,我无法控制。考虑到我的应用程序的最低OS版本将是10.5。(我知道,我知道……但我不能给出比上述更多的细节来解释为什么会出现这种情况。) MacOS10.5SDK中有一个API,我在10.4SDK中找不到与之相当的API。知道我将在Mac OS>=10.5上运行,我如何在运行时访问在运行时获取指向Carbon API的过程指针,api,macos,runtime,macos-carbon,Api,Macos,Runtime,Macos Carbon,我有一个Mac应用程序,我必须根据MacOS10.4SDK构建,原因很多,我无法控制。考虑到我的应用程序的最低OS版本将是10.5。(我知道,我知道……但我不能给出比上述更多的细节来解释为什么会出现这种情况。) MacOS10.5SDK中有一个API,我在10.4SDK中找不到与之相当的API。知道我将在Mac OS>=10.5上运行,我如何在运行时访问FSMatchAliasBulk?首先,从Xcode帮助菜单中选择“开发者文档”,查看Xcode帮助中的“交叉开发工作原理”。在文档窗口中,键入
FSMatchAliasBulk
?首先,从Xcode帮助菜单中选择“开发者文档”,查看Xcode帮助中的“交叉开发工作原理”。在文档窗口中,键入“交叉开发是如何工作的”,然后单击return。在那里您将看到更多信息
我认为您需要做的是:加载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(....);
}
}