Получить путь к пакету из c ++ без использования фундамента

0

В настоящее время я разрабатываю приложение для инфраструктуры Chromium Embedded. Проект состоит из клиента и помощника. Мне нужно знать путь пучка от помощника, просто используйте методы фундамента... Ну, я не могу, так как не могу использовать фундамент в помощнике.

Клиент является базовым ядром C++, завершенным в целевое приложение C++ для cocoa.

Помощник чист C++.

Эти два приложения используют собственный класс для поведения на основе процесса (см. Код ниже). Метод "OnBeforeCommandLineProcessing" должен использовать путь связки! (Просто изменение файла, заканчивающегося на.mm, и импорт фундамента /cocoa не работает, как только я импортирую фундамент, все становится уродливым с огромным количеством ошибок). Как я могу получить путь пакета из C++ без основания? Это не работает: mainBundle = CFBundleGetMainBundle();

namespace client {

// Base class for customizing process-type-based behavior.
class ClientApp : public CefApp {
 public:
  ClientApp();

  enum ProcessType {
    BrowserProcess,
    RendererProcess,
    ZygoteProcess,
    OtherProcess,
  };

  // Determine the process type based on command-line arguments.
  static ProcessType GetProcessType(CefRefPtr<CefCommandLine> command_line);

 protected:
  // Schemes that will be registered with the global cookie manager.
  std::vector<CefString> cookieable_schemes_;

 private:
  // Registers custom schemes. Implemented by cefclient in
  // client_app_delegates_common.cc
  static void RegisterCustomSchemes(CefRefPtr<CefSchemeRegistrar> registrar,
                                    std::vector<CefString>& cookiable_schemes);

  void OnBeforeCommandLineProcessing(const CefString& process_type,
                                    CefRefPtr<CefCommandLine> command_line) OVERRIDE;


  // CefApp methods.
  void OnRegisterCustomSchemes(
      CefRefPtr<CefSchemeRegistrar> registrar) OVERRIDE;

  DISALLOW_COPY_AND_ASSIGN(ClientApp);
};


}  // namespace client

#endif  // CEF_TESTS_CEFCLIENT_COMMON_CLIENT_APP_H_

Попытка импортировать cocoa/основание после переименования в.mm:

Изображение 174551

  • 1
    Фонд просто C API, просто включают в себя не импортировать файл ч , обычно в C ++ должен работать. Если нет, вы можете создать обёртку Objective-C ++, которая экспортирует функции C ++ вместо Objective-C.
  • 0
    Пришлось сбросить тип файла с c ++ на obj-c ++ в xcode, а также переименовать файлы в .mm
Показать ещё 2 комментария
Теги:
objective-c++
chromium-embedded

1 ответ

1
Лучший ответ

Вы импортируете Foundation.h когда имеете в виду #include <CoreFoundation/CoreFoundation.h>. Foundation является API ObjC (который несовместим с C++). Core Foundation - это API C. Когда вы включаете CoreFoundation, CFBundleGetMainBundle() должен быть в порядке. Обратите внимание на CF в начале, который указывает на его часть Core Foundation, vs NS которая указывает Foundation (или AppKit).

Нет необходимости переименовывать этот .mm. До тех пор, пока вы используете CoreFoundation, это прекрасно, чтобы быть чистым C++ файлом. Просто помните, что Core Foundation имеет собственное управление памятью. Нет ARC. Вам необходимо запомнить CFRelease все, что вы получили, используя функцию с Create или Copy в ее имени (или которую вы назвали CFRetain on. Полная информация содержится в руководстве по программированию памяти для Core Foundation.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню