Форум программистов, компьютерный форум CyberForum.ru

Clipboard (запись/чтение) массива структур - C++

Восстановить пароль Регистрация
 
_Dan_
2 / 2 / 0
Регистрация: 09.09.2011
Сообщений: 12
13.10.2011, 14:11     Clipboard (запись/чтение) массива структур #1
Привет, форумчане!
Прошу консультации по работе с буфером обмена Windows.
Нужно корректно записывать/считывать массив структур определенных мной.
По записи/чтении в буфер одного экземпляра структуры вопросов нет. Подскажите как правильно прочитать массив структур из буфера, при условии что записываться в него может различное число экземпляров. Даю свой код для наглядности.


Запись
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
struct Same_Data
{
 int X;
 float y;
};
struct Same_Data My_Data;
 
//------------------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
  My_Data.X = 100;
  My_Data.y = 89.698;
 
  UINT format = RegisterClipboardFormat("MY_STRUCT_FORMAT"); //регистрируем наш формат данных
 
  if( OpenClipboard(NULL) )//открываем буфер обмена
  {
       HGLOBAL hgBuffer;
 
       char* chBuffer;
 
       EmptyClipboard(); //очищаем буфер
 
       hgBuffer= GlobalAlloc( GMEM_DDESHARE, sizeof(struct Same_Data) );//выделим память
 
       struct Same_Data* buffer = (struct Same_Data*)GlobalLock(hgBuffer);
 
       *buffer = My_Data;      //запишем данные в память
 
       GlobalUnlock(hgBuffer); //разблокируем память
 
       SetClipboardData(format, hgBuffer); //помещаем данные в буфер обмена
 
       CloseClipboard();       //после работы с буфером, его нужно закрыть
  } //  if( OpenClipboard(NULL) )//открываем буфер обмена
 
    return 0;
}
//************************************************************************************************************

Чтение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
struct Same_Data
{
 int X;
 float y;
};
struct Same_Data;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
UINT format = RegisterClipboardFormat("MY_STRUCT_FORMAT"); //регистрируем наш формат данных
 
//прочитаем наши данные из буфера обмена
//вызываем второй раз, чтобы просто получить формат
 
Same_Data  data;
 
    if ( OpenClipboard(NULL) ) 
    {
       //извлекаем данные из буфера
       HANDLE hData = GetClipboardData(format);
       Same_Data* buffer = (Same_Data*)GlobalLock( hData );
       data = *buffer;  //заполняем структуру полученными данными
       GlobalUnlock( hData );
       CloseClipboard();
    }
 return 0;
}



Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
13.10.2011, 14:54     Clipboard (запись/чтение) массива структур #2
Цитата Сообщение от _Dan_ Посмотреть сообщение
GlobalLock
Цитата Сообщение от _Dan_ Посмотреть сообщение
GlobalAlloc

Подскажите как правильно прочитать массив структур из буфера
а где массив структур? в программе 2 точки входа...?
_Dan_
2 / 2 / 0
Регистрация: 09.09.2011
Сообщений: 12
13.10.2011, 15:04  [ТС]     Clipboard (запись/чтение) массива структур #3
Цитата Сообщение от alkagolik Посмотреть сообщение


а где массив структур? в программе 2 точки входа...?
Нет, это две консольные программки. Одна записывает в clipboard, вторая считывает. Массива структур тут нет, тут код для 1-го экземпляра. Я и прошу показать как корректно сделать с массивом структур.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
13.10.2011, 15:39     Clipboard (запись/чтение) массива структур #4
Цитата Сообщение от _Dan_ Посмотреть сообщение
Одна записывает в clipboard, вторая считывает.
но позвольте, их же надо синхронизировать... где гарантия что считывание будет после записи? запись будет после считывания... это наверное надо сделать в одном процессе двумя взаимозависимыми потоками...
Цитата Сообщение от _Dan_ Посмотреть сообщение
прошу показать как корректно сделать с массивом структур
не смешите людей. решите пару десятков задач по статическим и динамическим массивам.
_Dan_
2 / 2 / 0
Регистрация: 09.09.2011
Сообщений: 12
13.10.2011, 15:56  [ТС]     Clipboard (запись/чтение) массива структур #5
Цитата Сообщение от alkagolik Посмотреть сообщение
но позвольте, их же надо синхронизировать... где гарантия что считывание будет после записи? запись будет после считывания... это наверное надо сделать в одном процессе двумя взаимозависимыми потоками...

не смешите людей. решите пару десятков задач по статическим и динамическим массивам.
В моем случае с буфером обмена будет работать человек а не машина, так что синхронизация потоков тут не обязательно. Людей я не смешу, поэтому и обращаюсь в разделе «для начинающих».
Yandex
Объявления
13.10.2011, 15:56     Clipboard (запись/чтение) массива структур
Ответ Создать тему
Опции темы

Текущее время: 10:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru