Войти
ФлеймФорумПрограммирование

Гадский clipboard падает. (4 стр)

Страницы: 1 2 3 4 5 Следующая »
#45
(Правка: 19:44) 19:44, 20 фев. 2020

Интересно про GlobalAlloc :)
https://ru.stackoverflow.com/questions/532252/Почему-globalfree-такой-медленный

Что касается скорости работы освобождения памяти, то тут вопрос сложный и неоднозначный, т.к. что там делает ядро ОС при вызове GlobalFree известно только индусам, это ядро писавшим.


#46
19:50, 20 фев. 2020

Неисповедимы пути Эмэсдыэна.
Роника и "нипанятная" документация!

#47
(Правка: 20:01) 19:55, 20 фев. 2020
Неисповедимы пути Эмэсдыэна.

Святой отец джепег :)
#48
21:38, 20 фев. 2020

Ну ладно, документацию мы не читаем.
Но скопипастить-то рабочий код не откуда, шталь?

#49
21:55, 20 фев. 2020

Дак скопипастил.
Оказалось не верно.

Зато хорошо , что создал тему и мне показали мои ошибки.
Теперь хоть стало понятно как готовить этот Win ClipBoard.

#50
22:28, 20 фев. 2020

beejah
> Но скопипастить-то рабочий код не откуда, шталь?
для такой примитивной вещи, в своё время так и поступил. Довольно редко ловил крэши при открытии файла и копипасты названия файла, долго не мог понять что за хрень. Так как окно открытия файла это чистый winapi и им управляет система. И только через много времени нашел баг в той самой копипасте работы с буфером обмена.

#51
22:34, 20 фев. 2020

А разве мама вас не учила, что нельзя брать копипасты от подозрительных незнакомых дядек?
Если речь о winapi, то у майкрософта, на самом деле, есть копипасты чуть ли не на все случаи жизни. Всего-то и делов, что открыть гугл и прочитать английские буквочки.

#52
(Правка: 22:41) 22:38, 20 фев. 2020

Delfigamer
> А разве мама вас не учила, что нельзя брать копипасты от подозрительных
> незнакомых дядек?
так твоя копипаста в этой же теме как раз с багом.
> Если речь о winapi, то у майкрософта, на самом деле, есть копипасты чуть ли не
> на все случаи жизни. Всего-то и делов, что открыть гугл и прочитать английские
> буквочки.
быстрее написать с нуля, чем эти простыни перерабатывать под себя.

#53
22:42, 20 фев. 2020

ronniko
> Дак скопипастил.
> Оказалось не верно.
Надо с ответа копипастить, а не с вопроса.

#54
(Правка: 22:48) 22:48, 20 фев. 2020
Надо с ответа копипастить, а не с вопроса.

Я копипастил из каждого поста, по строчке :)
#55
22:50, 20 фев. 2020

Delfigamer
> Если речь о winapi, то у майкрософта, на самом деле, есть копипасты чуть ли не
> на все случаи жизни.
Говно их паста. Час будешь из кусков собирать, а потом где-нибудь мелким шрифтом "соррян, осбсолет". Проще взять актуальный рабочий код, мало продуктов и библиотек, работающих с буфером, шталь. 

#56
(Правка: 22:53) 22:52, 20 фев. 2020


Майкрософт еще могут написать на свои же старые примеры, что мы так не советуем делать :)

#57
(Правка: 23:05) 23:01, 20 фев. 2020

Delfigamer
> Если речь о winapi, то у майкрософта, на самом деле, есть копипасты чуть ли не
> на все случаи жизни. Всего-то и делов, что открыть гугл и прочитать английские
> буквочки
А не маловато ли там проверок и не много ли левого мусора, как для показательного примера?

Предлагаю такую ёлочку:

bool foo(HWND hwnd, const char* text) {
  bool result = false;
  if (text) {
    if (OpenClipboard(hwnd)) {
      if (EmptyClipboard()) {
        const size_t size = strlen(text) + 1;
        HGLOBAL handle = GlobalAlloc(GMEM_MOVEABLE, size);
        if (handle) {
          void *ptr = GlobalLock(handle);
          if (ptr) {
            memcpy(ptr, text, size);
            GlobalUnlock(handle);
            if (GetLastError() == NO_ERROR) {
              if (SetClipboardData(CF_TEXT, handle)) {
                result = true;
              }
            }
          }
          if (!result) {
            GlobalFree(handle);
          }
        }
      }
      CloseClipboard();
    }
  }
  return result;
}

#58
(Правка: 23:04) 23:04, 20 фев. 2020

entryway
CloseClipboard забыл проверить, вдруг тоже ошибку выдаст.

#59
23:06, 20 фев. 2020

entryway
Норм код, если елку развернуть.

Страницы: 1 2 3 4 5 Следующая »
ФлеймФорумПрограммирование