Какой заголовок я должен включать для memcpy и перевыделения?

Я портирую проект на iPhone, и он использует realloc и memcpy которые не найдены. Что должен включать заголовок?

Это - проект, смешивающий Objective C и C++, и я начинаю теряться.

Заранее спасибо за Вашу справку!

33
задан jww 30 November 2017 в 06:08
поделиться

2 ответа

Я столкнулся с этой проблемой в проекте, особенно потому, что у BlazeDS было другое время ожидания сеанса, чем у реального приложения (с использованием единого знака на архитектуре через ClearTrust). Следует отметить, что это было в среде JBoss. В итоге я выбрал довольно простой подход, найдя 2 специфических кода в обработчиках отказов (имели базовый класс с общим обработчиком отказов): DuplicateSessionDetected и DelivityInDoubt. Я видел DuplicateSessionDetected всякий раз, когда BlazeDS пытался создать новый сеанс для того же самого идентификатора сеанса JBoss. DeliviveInDoubt, как правило, иногда также появляется, но я не уверен, почему. Когда я увидел эти коды ошибок, я предпринял необходимые действия, чтобы обновить приложение (в зависимости от ваших потребностей, вы можете перенаправить на страницу входа или что-то еще). Очевидно, что в зависимости от среды может потребоваться прослушивание различных кодов неисправностей, и этот подход может работать не в любой ситуации, учитывая различные среды/конфигурационные элементы/и т.д.

Другой подход, который обсуждался, заключался в использовании таймера в приложении Flex, который представлял бы таймер таймаута BlazeDS, но я не поклонником, чтобы таймеры сидели с этой целью. Я также слышал о посылке небольшого количества данных туда и обратно на сервер для проверки тайм-аута, но опять же, это казалось менее чем идеальным.

-121--4056488-

Чтобы сделать Process.Start использовать exec непосредственно вместо использования механизма OS 'для открытия файлов, необходимо задать для UseShellExecute значение false. Это также справедливо для Linux и Windows.

Process.Start(new ProcessStartInfo (
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
    "--no-first-run")
    { UseShellExecute = false });

Обратите внимание, что для правильного запуска набора приложений Chrome можно использовать «open». Используйте аргумент «-a» для принудительного запуска определенного приложения, аргумент «-n» для открытия нового экземпляра и «--args» для передачи аргументов:

Process.Start(new ProcessStartInfo (
    "open",
    "-a '/Applications/Google Chrome.app' -n --args --no-first-run")
    { UseShellExecute = false });
-121--1537532-

В C:

#include <string.h> // memcpy
#include <stdlib.h> //realloc

В C++ удалите .h и префикс с c . В C++ они будут помещены в пространство имен std , но также будут глобальными.

49
ответ дан 27 November 2019 в 18:17
поделиться

В C ++ более идиоматично использовать std :: copy , чем C memcpy , хотя последний работает так же хорошо. Чтобы получить std :: copy , вам нужно #include .

Однако прямого эквивалента realloc в C ++ не существует.

8
ответ дан 27 November 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: