Получение указателя proc на Carbon API во время выполнения - PullRequest
0 голосов
/ 11 ноября 2009

У меня есть приложение Mac, которое я должен собрать для Mac OS 10.4 SDK по разным причинам, не зависящим от меня. Учитывая, что минимальная версия ОС моего приложения будет 10,5. (Я знаю, я знаю ... но я не могу дать больше подробностей, чем выше, чтобы объяснить, почему это так.)

В Mac OS 10.5 SDK есть API, FSMatchAliasBulk, для которого я не могу найти хороший эквивалент в 10.4 SDK. Зная, что я буду работать в Mac OS> = 10,5, как я могу получить доступ к FSMatchAliasBulk во время выполнения?

1 Ответ

1 голос
/ 12 ноября 2009

Во-первых, посмотрите «Как работает кросс-разработка» в справке XCode, выбрав «Документация разработчика» в меню «Справка XCode». В окне документации введите «Как работает кросс-разработка» и нажмите «Return». Там вы увидите больше информации.

И вот что я думаю вам нужно сделать: загрузить инфраструктуру CoreServices и затем получить указатель на функцию для этой функции, если вы знаете, что работаете в Mac OS X 10.5 (проверьте функциональность Gestalt, чтобы определить что).

Вот пример, который не тестировался, но должен привести вас в правильном направлении:

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(....);
 }
 }
...