Как скопировать строку в буфер обмена в C?

Из описания страница Apache Commons Functor :

функтор А является функцией, которой можно управлять как объект или объект, представляющий единственную, родовую функцию.

Функторы поддерживают и поощряют много мощных методов программирования включая:

  • программирование в функциональном стиле
  • функции высшего порядка
  • внутренние итераторы
  • повторное использование и специализация через состав, а не наследование и перегрузку
  • универсальные API "обратного вызова" или "точки расширения"
  • универсальные "фильтры" или API предиката
  • много "поведенческих" шаблонов разработки, таких как Посетитель, Стратегия, Цепочка Ответственности, и т.д.

28
задан Asesh 3 June 2018 в 09:30
поделиться

2 ответа

Прочтите документацию MSDN для функции SetClipboardData . Похоже, вы пропустили несколько шагов и преждевременно освободили память. Прежде всего, вы должны позвонить OpenClipboard , прежде чем вы сможете использовать SetClipboardData. Во-вторых, система становится владельцем памяти, переданной в буфер обмена, и она должна быть разблокирована. Кроме того, память должна быть подвижной, что требует наличия флага GMEM_MOVEABLE, который используется с GlobalAlloc (вместо LocalAlloc).

const char* output = "Test";
const size_t len = strlen(output) + 1;
HGLOBAL hMem =  GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
55
ответ дан 28 November 2019 в 02:48
поделиться

Взгляните на Документацию Microsoft по использованию буфера обмена . Для этого требуется, чтобы вы использовали WinAPI, но это не должно быть проблемой, поскольку у вас Windows. Обратите внимание, что программирование Windows API никогда не бывает простым, если вы не используете язык очень высокого уровня.

0
ответ дан 28 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

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