Как я могу получить доступ к событию Apple openFile в C ++? - PullRequest
4 голосов
/ 17 декабря 2011

Я заинтересован в написании небольшой утилиты на C ++ для Mac OS X для чтения, анализа, сохранения (перезаписи) записи файла.Мне не нужны GUI, меню или окна.

  1. Какой тип шаблона проекта мне нужно начать в XCode?
  2. Как получить доступ к файлу, которыйпрошло?(Это передается с Apple Events openFile, верно?)

Я сделал немного C ++, но ничего на Mac.Ссылки оценили, примеры кода оценили больше.

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Как вы собираетесь передавать файлы в ваше приложение?

Если это через командную строку, вы должны использовать шаблон инструмента командной строки и получать доступ к параметрам командной строки так же, как и на любой платформе POSIX (argc и argv).

Если вы хотите передать файлы в ваше приложение с помощью Finder, скажем, путем перетаскивания файлов на значок приложения, то вы должны использовать шаблон приложения Cocoa.

Файл Info.plist содержит конфигурацию вашего приложения и поддерживаемые типы документов, аналогичные реестру в Windows.

  1. Вы настраиваете Info.plist с помощью вкладки «Информация» в настройках проекта (это самый верхний файл в файловом навигаторе в XCode).Нажмите кнопку «Добавить» в правом нижнем углу, затем выберите «Добавить тип документа», чтобы добавить тип документа, который будет принимать ваше приложение.Чтобы принять все документы, установите имя документа на All и установите расширение на *. Более подробная информация здесь .

  2. Добавьте ключ LSUIElement в свой Info.plist и установите его значение на YES, чтобы указать, что ваше приложение не имеет пользовательского интерфейса.Этот ключ также отображается как «Приложение является агентом» в XCode. Подробнее о LSUIElement можно узнать здесь.

  3. В вашем MainMenu.xib вы можете удалить объекты Window и Font Manager, которые есть по умолчанию, так как вы выиграли 'они не нужны.

  4. Переименуйте файл AppDelegate.m в AppDelegate.mm , чтобы он был скомпилирован как Objective-C ++.Это позволит вам использовать код C ++ в этом файле.

  5. В методе делегата applicationDidFinishLaunching: добавьте [NSApp terminate:nil];, чтобы ваше приложение немедленно завершало работу, когда оно выполнит свою работу.

Добавьте следующий метод в AppDelegate.mm:

- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    NSLog(@"Opening file %@", filename);

    char* cFilename = [filename UTF8String];    

    // Your C++ code goes here

    return YES;
}

Вот и все.Остальное ваш код на C ++.Вы можете добавить любой код C ++ в AppDelegate.mm, который вы хотите.Например:

#include <string>
#include <iostream>
#include "MyCppFileProcessor.h"

- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    std::string cFilename([filename UTF8String]);
    std::cout << "Processing file: " << cFilename << std::endl;

    MyCppFileProcessor fileProcessor;
    fileProcessor.processFile(cFilename);

    return YES;
}

Этот код будет запускаться всякий раз, когда вы перетаскиваете документ на значок вашего приложения в Finder.

1 голос
/ 17 декабря 2011

1) Используйте шаблон инструмента командной строки.Есть несколько вариантов для этого шаблона.Вы можете выбрать C ++ из меню.

2) Насколько я знаю, IOstream будет работать нормально.Кроме того, в вашей функции main () есть параметр-аргумент, вы можете получить имя файла из этих аргументов.

http://www.cplusplus.com/reference/iostream/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...