Я вызываю LSCopyApplicationURLsForURL () с использованием C ++, но получаю ошибку сегмента - PullRequest
0 голосов
/ 18 июня 2019

Я хочу написать программу на C ++, чтобы получить связанные приложения, которые подходят для открытия указанного файла. Я нахожу LSCopyApplicationURLsForURL API и создаю приложение C ++ для командной строки с помощью XCode.

Но после запуска этой программы я всегда получаю ошибку сегмента. XCode показывает ошибку EXEC_BAD_ACCESS (код = 1, адрес ....).

Я также попытался запустить его из sudo, но результат тот же. В чем проблема?

Код:

#include <iostream>
#include <objc/objc.h>
#include <objc/objc-runtime.h>
#include <CoreFoundation/CoreFoundation.h>
#include <CoreServices/CoreServices.h>

using namespace std;

int main(int argc, const char * argv[]) {
    auto url = CFURLRef("file:///Users/efan/src/a.cpp");
    auto ret = LSCopyApplicationURLsForURL(url, kLSRolesAll);
    cout << ret << endl;
    return 0;
}

1 Ответ

0 голосов
/ 18 июня 2019

Попробуйте создать CFURLRef, используя один из правильных CFURLCreate* методов.См. «Создание CFURL» здесь .

Например:

auto tempStringURL = CFStringCreateWithCString(nullptr, "/Users/efan/src/a.cpp", kCFStringEncodingUTF8);
auto url = CFURLCreateWithFileSystemPath(nullptr, tempStringURL, kCFURLPOSIXPathStyle, FALSE);
auto ret = LSCopyApplicationURLsForURL(url, kLSRolesAll);

Вам необходимо Release переменные «Created» для очистки памяти.

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