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

Передача данных между двумя приложениями. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
Kiton
0 / 0 / 0
Регистрация: 12.05.2012
Сообщений: 7
12.05.2012, 08:19     Передача данных между двумя приложениями. #1
Суть проблемы такова: есть приложение на с#, производящее вычисления, результатом является массив данных. Есть прога на с++ + QT, умеющая визуализировать подобные данные. Вопрос: можно ли как-то передать данные (массив интов) из проги на с# в прогу на с++ в реальном времени (т.е., например, без записи в файл и чтения)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.05.2012, 08:29     Передача данных между двумя приложениями. #2
Можно, если размер массива не сильно большой. Можно через глобальную память передавать или маршалить между процессами, но тогда вдвое больше памяти оперативной потребуется.
Если массив не большой (несколько мегабайт, например), то можно через буфер обмена Windows. Это самый простой способ, потому что не будет проблем с синхронизацией.
Kiton
0 / 0 / 0
Регистрация: 12.05.2012
Сообщений: 7
12.05.2012, 08:37  [ТС]     Передача данных между двумя приложениями. #3
Спасибо! А можно пример или ссылку как в с++ (qt) проге вытащить данные из буфера обмена?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.05.2012, 08:55     Передача данных между двумя приложениями. #4
Я фрагмент кода скопирую. BuildData строку формирует, остальные функции это WinAPI.
Этот код копирует данные в буфер обмена. Нужно второму приложению послать сообщение о необходимости извлечь данные из буфера. WM_COPYDATA, если не ошибаюсь.
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
        std::wstring data;
        BuildData( data );
 
        wchar_t * lptstrCopy = NULL; 
        HGLOBAL hglbCopy = NULL; 
 
        if( !OpenClipboard() ) 
            return; 
 
        EmptyClipboard(); 
 
        hglbCopy = GlobalAlloc( GMEM_MOVEABLE, (data.size()+1)*2 ); 
        if (hglbCopy == NULL) 
        { 
            CloseClipboard(); 
            return; 
        } 
 
        lptstrCopy = (wchar_t*)GlobalLock(hglbCopy); 
 
        memcpy(lptstrCopy, data.c_str(), data.size()*2);
        lptstrCopy[data.size()] = 0;
        GlobalUnlock(hglbCopy); 
 
        SetClipboardData(CF_UNICODETEXT, hglbCopy); 
 
        CloseClipboard();
Yandex
Объявления
12.05.2012, 08:55     Передача данных между двумя приложениями.
Ответ Создать тему
Опции темы

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