2013-10-14 11 views
0

Я пытаюсь использовать рамку LaunchServices. К сожалению, некоторые функции остаются недоступными. Например, функция kLSSharedFileListFavoriteItems была успешно импортирована. Однако я не могу загрузить функцию LSSHaredFileListCreate. Код:Как добавить рамки LaunchServices (mac os) в Delphi xe4?

unit LSSharedFileList; 
interface 
uses MacApi.CoreFoundation, MacApi.CocoaTypes; 
const 
    LaunchServicesLib = 
'/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/LaunchServices'; 
type 
{$EXTERNALSYM LSSHaredFileListRef} 
LSSHaredFileListRef  = Pointer; 
{$EXTERNALSYM LSSHaredFileListCreate} 
function LSSHaredFileListCreate(inAlloccator : CFAllocatorRef; inListType : CFStringRef; 
    listOptions : CFTypeRef) : LSSHaredFileListRef; cdecl; 
{$EXTERNALSYM kLSSharedFileListFavoriteItems} 
function kLSSharedFileListFavoriteItems() : CFStringRef; cdecl; 

implementation 

uses Posix.Dlfcn; 

var 
_LSSHaredFileListCreate   : Pointer = nil; 
_kLSSharedFileListFavoriteItems : Pointer = nil; 
_libHandle      : THandle = 0; 
//-------------------------------------------------------------------------------- 
function LSSHaredFileListCreate(inAlloccator : CFAllocatorRef; inListType : CFStringRef; 
listOptions : CFTypeRef) : LSSHaredFileListRef; 
begin 
    if not Assigned(_LSSHaredFileListCreate) then 
_LSSHaredFileListCreate := dlSym(_libHandle, MarshaledAString('LSSHaredFileListCreate')); 
Result := nil;// 
end; 
//----------------------------------------------------------------------- 
function kLSSharedFileListFavoriteItems() : CFStringRef; 
begin 
    if not Assigned(_kLSSharedFileListFavoriteItems) then 
    _kLSSharedFileListFavoriteItems := dlSym(_libHandle, MarshaledAString('kLSSharedFileListFavoriteItems')); 
    Result := CFStringRef(_kLSSharedFileListFavoriteItems^) 
end; 
//---------------------------- 
initialization 
_libHandle := dlOpen(MarshaledAString(LaunchServicesLib), RTLD_LAZY); 
finalization 
dlclose(_libHandle) 
end. 

Так, _LSSHaredFileListCreate всегда NIL в отличие от _kLSSharedFileListFavoriteItems, которая имеет правильный адрес. Может быть, "LSSharedFileListCreate" содержит в другой lib? Любая идея? Спасибо.

+0

Довольно старая тема, но вам удалось получить, что LaunchServices код работает? Вызов 'LSSharedFileListCreate (nil, kLSSharedFileListSessionLoginItems, nil)' всегда возвращался ** nil **, когда я запускал его, по крайней мере, на El Capitan. Как в подписанном, так и в неподписанном приложении. – VGeorgiev

ответ

0

Ошибка была во имя функции библиотеки.

_LSSHaredFileListCreate := dlSym(_libHandle, MarshaledAString('LSSHaredFileListCreate')); 

Правильный код

_LSSHaredFileListCreate := dlSym(_libHandle, MarshaledAString('LSSharedFileListCreate')); 

(LSS * ч * aredFileListCreate)