Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QClipboard 
V
    Опции темы
zss
Дата 29.4.2009, 23:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Блин - перелопатил весь проект. Я использую графики из QWT. И как только их подключаю - clipboard перестает работать.
Посмотрел исходники - вроде qwt не использует его.

Что же он такое может делать ?
PM MAIL ICQ   Вверх
Любитель
Дата 29.4.2009, 23:28 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(zss @  29.4.2009,  23:16 Найти цитируемый пост)
И как только их подключаю

Что значит подключаю? Достаточно линковки с QWT? Или создание какого-то виджета?

Вообще, странная проблема, конечно... Прям интересно стало smile


--------------------
PM MAIL ICQ Skype   Вверх
zss
Дата 30.4.2009, 08:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(Любитель @  29.4.2009,  23:28 Найти цитируемый пост)
Что значит подключаю? Достаточно линковки с QWT?

достаточно линковки. Я тоже удивился этому
PM MAIL ICQ   Вверх
zss
Дата 6.5.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



в общем я так и не понял что происходит, но у меня через 2 часа работы GUI сходит с ума.
Причем память не течет.

Единственное что удалось получить - некоторые ошибки при запуске приложения.
1. Qt: Could not initialize OLE (error 80010106)
2. QClipboard::setMimeData: Failed to set data on clipboard ()
...
3. Error disconnect to signal
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Хм.. 80010106? MSDN говорит про это:
Цитата

A previous call to CoInitializeEx specified the concurrency model for this apartment as multithread apartment (MTA).


Функция OleInitialize инициализирует COM с STA моделью:
Цитата

Because OLE operations are not thread-safe, OleInitialize specifies the concurrency model as single-thread apartment. 


Отсюда вывод - где-то у тебя вызывается инициализация COM-системы с заданием многопоточной модели. Осталось выяснить где smile Если проблема именно в Qwt - то, думаю, без исследования её исходников не обойтись. Ещё вариант - запустить приложение из-под дебаггера с брейкпоинтом на вызов CoInitializeEx. И посмотреть где это происходит. Что в данном случае легче (реверс инжениринг сорсов или приложения) - очень спорный вопрос.

Это сообщение отредактировал(а) Любитель - 6.5.2009, 13:03


--------------------
PM MAIL ICQ Skype   Вверх
zss
Дата 6.5.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(Любитель @  6.5.2009,  12:41 Найти цитируемый пост)
Отсюда вывод - где-то у тебя вызывается тгтцтализации COM-системы с заданием многопоточной модели. Осталось выяснить где smile

блин....

у меня используется библиотека, в которой описаны классы для работы с COM
Код

template <DWORD T = COINIT_APARTMENTTHREADED>
class ComInitializeEx : private boost::noncopyable {
private :
    DWORD m_threadID;
    HRESULT m_hResult;

public :
    ComInitializeEx () : m_threadID (GetCurrentThreadId())
    {
        m_hResult = CoInitializeEx (NULL, T);
        _ASSERTE (SUCCEEDED(m_hResult));
    }
    ~ComInitializeEx()
    {
        _ASSERTE(m_threadID == GetCurrentThreadId());
        if (SUCCEEDED(m_hResult)) CoUninitialize ();
    }
};



неужели в этом проблема ?
1. к чему может привести ошибка инициализации OLE для QT ?
2. а подружить их нельзя ?
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



А как создаются объекты этого класса? T задаётся когда-нибудь явно?


--------------------
PM MAIL ICQ Skype   Вверх
zss
Дата 6.5.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(Любитель @  6.5.2009,  13:13 Найти цитируемый пост)
А как создаются объекты этого класса? T задаётся когда-нибудь явно? 

посмотрел под отладкой - CoInitialize не вызывается. Значет проблема не в этом...
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Всмысле не вызывается? Если у тебя создаются объекты вышеприведённого класса - то вызывается. Вопрос - с каким аргументом. С тем, что в шаблоне по дефолту стоит - проблем вызвать не должно. Проблема должны появится после COINIT_MULTITHREADED smile

Qwt, как показала проверка, вообще COM не использует (зачем он ей?). Так что посмотри по всем используемым библиотекам и по твоему коду - где вызывается инициализация COM.

Цитата(zss @  6.5.2009,  12:59 Найти цитируемый пост)
1. к чему может привести ошибка инициализации OLE для QT ?

Ну, в частности к тому что клипборд работать не будет.

Цитата(zss @  6.5.2009,  12:59 Найти цитируемый пост)
2. а подружить их нельзя ? 

STA и MTA в пределах одного процесса - нельзя. Почти никак (создание отдельны длл-ок, и маршалинг данных в/из неё выходит, я думаю, за рамки этого раздела). Для клипборда необходима STA модель. Следовательно лучшим решением будет избавление от мультипоточной COM-модели.


--------------------
PM MAIL ICQ Skype   Вверх
zss
Дата 6.5.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(Любитель @  6.5.2009,  13:24 Найти цитируемый пост)
Всмысле не вызывается? Если у тебя создаются объекты вышеприведённого класса - то вызывается. Вопрос - с каким аргументом. С тем, что в шаблоне по дефолту стоит - проблем вызвать не должно. Проблема должны появится после COINIT_MULTITHREADED

инменно не вызывается. Те классы где этот код используется не создаются.


Цитата(Любитель @  6.5.2009,  13:24 Найти цитируемый пост)
STA и MTA в пределах одного процесса - нельзя. Почти никак (создание отдельны длл-ок, и маршалинг данных в/из неё выходит, я думаю, за рамки этого раздела). Для клипборда необходима STA модель. Следовательно лучшим решением будет избавление от мультипоточной COM-модели. 


знать бы как smile

вот output
Код

'console.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
'console.exe': Loaded 'C:\QT\4.4.3\bin\QtCored4.dll', Symbols loaded.
'console.exe': Loaded 'C:\WINDOWS\system32\user32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\ole32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\secur32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\ws2_32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\ws2help.dll'
'console.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll', Symbols loaded.
'console.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll', Symbols loaded.
'console.exe': Loaded 'C:\QT\4.4.3\bin\QtGuid4.dll', Symbols loaded.
'console.exe': Loaded 'C:\WINDOWS\system32\comdlg32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\comctl32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\shell32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\shlwapi.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\oleaut32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\imm32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\winmm.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\winspool.drv'
'console.exe': Loaded 'C:\QT\4.4.3\bin\QtNetworkd4.dll', Symbols loaded.
'console.exe': Loaded 'C:\QWT\5.2.0\lib\qwtd5.dll', Symbols loaded.
'console.exe': Loaded 'C:\WINDOWS\system32\mpr.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\rasapi32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\rasman.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\netapi32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\tapi32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\rtutils.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\wininet.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\crypt32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\msasn1.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\powrprof.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\setupapi.dll'
'console.exe': Loaded 'C:\Program Files\Kaspersky Lab\Kaspersky Anti-Virus 6.0 for Windows Workstations\adialhk.dll'
'console.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\uxtheme.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\MSCTF.dll'
Qt: Could not initialize OLE (error 80010106)
QClipboard::setMimeData: Failed to set data on clipboard ()
'console.exe': Loaded 'C:\QT\4.4.3\plugins\imageformats\qgifd4.dll'
'console.exe': Loaded 'C:\QT\4.4.3\plugins\imageformats\qicod4.dll'
'console.exe': Loaded 'C:\QT\4.4.3\plugins\imageformats\qjpegd4.dll'
'console.exe': Loaded 'C:\QT\4.4.3\plugins\imageformats\qmngd4.dll'
'console.exe': Loaded 'C:\QT\4.4.3\plugins\imageformats\qsvgd4.dll'
'console.exe': Loaded 'C:\QT\4.4.3\bin\QtSvgd4.dll', Symbols loaded.
'console.exe': Loaded 'C:\QT\4.4.3\plugins\imageformats\qtiffd4.dll'
'console.exe': Loaded 'C:\WINDOWS\system32\xpsp2res.dll', Binary was not built with debug information.
Error disconnect to signal
Error disconnect to signal




Это сообщение отредактировал(а) zss - 6.5.2009, 13:32
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(zss @  6.5.2009,  13:28 Найти цитируемый пост)
знать бы как

Различные варианты. Например, просто поиск по исходникам smile Я не уверен, можно ли в студии, поставить брейкпоинт на вызов API-функции.. Если можно - то это лучший способ. Можно воспользоваться и low-level дебаггером.

ЗЫ Плагины непричём. Так Qt работает просто.


--------------------
PM MAIL ICQ Skype   Вверх
zss
Дата 6.5.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



в общем CoInitialize вызывается только в конструкторе этого класса.
Сделал его не шаблонным и поставил бряк на конструктор. Кроме как конструктору его вызывать некому.

Бряк не отработал, а инициализация все-равно нарушена :(
Блин... я уже несколько дней убил на это...
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



zss, а ты не можешь проект выложить?


--------------------
PM MAIL ICQ Skype   Вверх
zss
Дата 6.5.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(Любитель @  6.5.2009,  14:14 Найти цитируемый пост)
zss, а ты не можешь проект выложить? 

он очень большой и тянет за собой кучу сторонних библиотек.

Я пытался сначала тестовый создать - не получилось добиться такой же ошибки.

После попытался с нуля данного проекта отследить когда это происходить - тоже не получилось.
Ошибка не систематическая. Проверял все ключи проектов и используемых библиотек - вроде все в порядке

Добавлено через 55 секунд
QT чтоли переварить... Она коммерческая и я ее не варил
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Ладно, пойдём другим путём smile Возьми Olly Debugger (с комманд-бар плагином для удобства). Поставь брейкпоинт на CoInitializeEx. Запускаешь, после всех брейкпоинтов смотришь call stack (выводы через OutputDebugString там также логируются, так что твой "Qt: Couldn't initialize OLE" ты тоже увидишь, после него смотреть что-то нет смысла). По идее студия такое тоже должна уметь, но, если честно я не уверен.


--------------------
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0974 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.