В настоящее время я разрабатываю приложение для инфраструктуры 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:
Вы импортируете 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.