0

LSCopyAllHandlersForURLScheme 関数を使用して、Mac OS X にインストールされている Web ブラウザーを列挙しようとしています。私のやり方で、Delphi RTL に含まれている Macapi.CoreServices ファイルをチェックしていたところ、すべてのインクルード ファイルが実際に存在するわけではないことがわかりました。 $I include ディレクティブではなく、コメントのように表示されます。何か不足していますか? ここにコードがあります

unit Macapi.CoreServices;

{$WEAKPACKAGEUNIT}

interface

{$I OSTypes.inc}
{$I MacTypes.inc}
{$I TextCommon.inc}
{$I Files.inc}
{$I DispatchSemaphores.inc}
{$I MacErrors.inc}
{$IFNDEF IOS}
{$I Multiprocessing.inc}
{$I DriverServices.inc}
{$I Gestalt.inc}
{$ENDIF !IOS}
{ $I OSServices.inc}
{ $I SFNetwork.inc}
{ $I LaunchServices.inc}
{ $I SearchKit.inc}
{ $I Metadata.inc}
{ $I DictionaryServices.inc}
{ $I AE.inc}

const
  CoreServicesLib = '/System/Library/Frameworks/CoreServices.framework/CoreServices';
  {$EXTERNALSYM CoreServicesLib}
  CarbonCoreLib = '/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/CarbonCore';
  {$EXTERNALSYM CarbonCoreLib}

implementation

{$IF NOT DECLARED(_PU)}
const
  {$IFDEF UNDERSCOREIMPORTNAME}
  _PU = '_';
  {$ELSE}
  _PU = '';
  {$ENDIF}
{$ENDIF}

{$I MacTypesImpl.inc}
{ $I TextCommonImpl.inc}
{$I FilesImpl.inc}
{$I DispatchSemaphoresImpl.inc}
{$IFNDEF IOS}
{$I MultiprocessingImpl.inc}
{$I DriverServicesImpl.inc}
{$I GestaltImpl.inc}
{$ENDIF !IOS}
{ $I OSServicesImpl.inc}
{ $I SFNetworkImpl.inc}
{ $I LaunchServicesImpl.inc}
{ $I SearchKitImpl.inc}
{ $I MetadataImpl.inc}
{ $I DictionaryServicesImpl.inc}
{ $I AEImpl.inc}

end.
4

1 に答える 1

0

今のところ自分で関数をインポートしました。これを行う方法は次のとおりです(非常に簡単です):

const launchServicesLib = '/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/LaunchServices';
function LSCopyAllHandlersForURLScheme(inURLScheme: CFStringRef) : CFArrayRef; cdecl; external launchServicesLib name '_LSCopyAllHandlersForURLScheme';

Embarcadero が LaunchServices を実装しなかった理由がわかりません!

ありがとう、

于 2015-09-16T11:50:42.713 に答える