Поиск:

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


Опытный
**


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

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



что-то ни хрена не пашет
Код

 QClipboard *clipboard = QApplication::clipboard();
 QString originalText = clipboard->text();
 ...
 clipboard->setText(newText);


новое значение не выставляется. А если попытать прочитать, то остается старое, вставленное из Windows
PM MAIL ICQ   Вверх
Acer
Дата 23.4.2009, 13:12 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



Вот так работает. В твоем случае не инициализируется буффер обмена для твоего приложения
Код

#include <QtGui/QApplication>
#include <QtGui/QClipboard>

int main(int argc, char *argv[]){
    QApplication app( argc, argv );

    QClipboard *cb = app.clipboard();
    cb->setText( "simple string" );

    return 0;
}

PM MAIL   Вверх
SABROG
Дата 23.4.2009, 13:14 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



А у меня всё работает:

Код

#include <QtCore/QtGlobal>
#include <QtCore/QtDebug>
#include <QtGui/QApplication>
#include <QtGui/QClipboard>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QClipboard *clipboard = QApplication::clipboard();
    QDebug d(QtDebugMsg);
    d << clipboard->text();
    clipboard->setText(QLatin1String("this a new text"));
    d << clipboard->text();
    return 0;
}




--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
zss
Дата 23.4.2009, 13:20 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Acer @  23.4.2009,  13:12 Найти цитируемый пост)
В твоем случае не инициализируется буффер обмена для твоего приложения

что значит не инициализируется ? Он создается при создании приложения, а значет должен инициализироваться




Цитата(SABROG @  23.4.2009,  13:14 Найти цитируемый пост)
#include <QtCore/QtGlobal>
#include <QtCore/QtDebug>
#include <QtGui/QApplication>
#include <QtGui/QClipboard>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QClipboard *clipboard = QApplication::clipboard();
    QDebug d(QtDebugMsg);
    d << clipboard->text();
    clipboard->setText(QLatin1String("this a new text"));
    d << clipboard->text();
    return 0;
}


странно - у меня тоже отработал. А почему же не в main не работает
PM MAIL ICQ   Вверх
SABROG
Дата 23.4.2009, 13:32 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



QApplication должен предшествовать всему прочему.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
zss
Дата 23.4.2009, 16:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SABROG @  23.4.2009,  13:32 Найти цитируемый пост)
QApplication должен предшествовать всему прочему. 

ну так и и есть

main.cpp
Код

        QApplication app (argc, argv);
        Q_INIT_RESOURCE(mylib);
        QApplication::setStyle(new QCleanlooksStyle());
        QTextCodec* codec = QTextCodec::codecForName("CP1251");
        QTextCodec::setCodecForTr (codec);

        MainForm form;
        form.showMaximized();
        app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
        return app.exec();


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


Опытный
**


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

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



ну в общем голову сломал, а как его победить - не понятно :(
PM MAIL ICQ   Вверх
SABROG
Дата 27.4.2009, 13:40 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Ну ты же не выкладываешь полный компилируемый проект, как тебе помочь не понятно.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
zss
Дата 27.4.2009, 20:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SABROG @  27.4.2009,  13:40 Найти цитируемый пост)
Ну ты же не выкладываешь полный компилируемый проект, как тебе помочь не понятно. 

пытался создать тестовый проект - все работает.
А мой проект просто очень большой и эмитировать его не удается. Поэтому и не знаю куда копать :(
PM MAIL ICQ   Вверх
SABROG
Дата 27.4.2009, 21:01 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Ну попробуй пихать работу с буффером в разные места программы. Варьировать варианты текста - английский/русский/уникод/не уникод. В главном потоке, в дочернем потоке (если таковые имеются). Включить отладку, смотреть в консоль, может ошибки пишутся какие. Запускать на разных компьютерах. Пробовать разные версии Qt. Разные сборки. Разные компиляторы. Пробуй удалять независимые куски кода до тех пор, пока не локализуешь место из-за которого программа не работает.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
zss
Дата 28.4.2009, 09:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SABROG @  27.4.2009,  21:01 Найти цитируемый пост)
Ну попробуй пихать работу с буффером в разные места программы. Варьировать варианты текста - английский/русский/уникод/не уникод. В главном потоке, в дочернем потоке (если таковые имеются). Включить отладку, смотреть в консоль, может ошибки пишутся какие. Запускать на разных компьютерах. Пробовать разные версии Qt. Разные сборки. Разные компиляторы. Пробуй удалять независимые куски кода до тех пор, пока не локализуешь место из-за которого программа не работает. 

так весь прикол в том, что он уже в main не работает smile

Код

        QApplication app (argc, argv);

        QClipboard* clipboard = QApplication::clipboard();
        clipboard->setText ("xxx");


может какие настройки проекта? Да они не должны влиять на это...
PM MAIL ICQ   Вверх
SABROG
Дата 28.4.2009, 12:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Может он уже затирается до того момента, где ты его начинаешь использовать?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
zss
Дата 28.4.2009, 12:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SABROG @  28.4.2009,  12:41 Найти цитируемый пост)
Может он уже затирается до того момента, где ты его начинаешь использовать? 

каким образом ? я поставил бряк сразу за работой с clipboard - нифига. Блин - чудеса какие-то...
PM MAIL ICQ   Вверх
SABROG
Дата 28.4.2009, 12:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Попробуй его использовать после app.exec, может какая-то завязка на eventloop есть.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
zss
Дата 28.4.2009, 15:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SABROG @  28.4.2009,  12:57 Найти цитируемый пост)
Попробуй его использовать после app.exec, может какая-то завязка на eventloop есть. 

попробовал - нифига
PM MAIL ICQ   Вверх
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   Вверх
zss
Дата 6.5.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



блин действительно бряк отработал. его вызвал код из comctrl32

А какого хрена он сам там себе вариться....
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(zss @  6.5.2009,  15:16 Найти цитируемый пост)
comctrl32

А второй параметр чему равен при этом? И ещё - comctl32.dll для многих компонентов (ListView, TreeView, etc.) требует COM-а. Но вряд ли инициализация будет вызываться для многопоточной модели.. Вообщем надо разбиратсья smile А брякнулось один раз только?


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


Опытный
**


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

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



Цитата(Любитель @  6.5.2009,  15:20 Найти цитируемый пост)
А брякнулось один раз только?

брякнула 2 раза.
Qt в отладке показала, что не отработал OleInitialize.
Причем весь прикол в том, что он сработал на QApplication().
В этот момент не создано ни одного моего объекта. Кто его вызывает - не понятно.

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


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


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

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



Хм.. Ну, тяежло что-то конкретно сказать. Вообщем, проблема именно в том, что кто-то вызывает CoInitializeEx с флагом COINIT_MULTITHREADED. То, что это делается до создания QApplication - это нормально. В том плане, что инициализация OLE Qt производит именно там (qapplication_win.cpp, функция qt_init). Многопоточная модель для COM-а ставится где-то до этого. Причём, замечу ещё раз - дело не в вызове CoInitializeEx как таковом, а в его вызове с параметром COINIT_MULTITHREADED. Больше тяжело что-то сказать - надо дебажить и ворочать проект, искать причину бага. Могу тольк пожелать удачи smile


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


Опытный
**


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

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



Цитата(Любитель @  6.5.2009,  16:17 Найти цитируемый пост)
Хм.. Ну, тяежло что-то конкретно сказать. Вообщем, проблема именно в том, что кто-то вызывает CoInitializeEx с флагом COINIT_MULTITHREADED. То, что это делается до создания QApplication - это нормально. В том плане, что инициализация OLE Qt производит именно там (qapplication_win.cpp, функция qt_init). Многопоточная модель для COM-а ставится где-то до этого. Причём, замечу ещё раз - дело не в вызове CoInitializeEx как таковом, а в его вызове с параметром COINIT_MULTITHREADED. Больше тяжело что-то сказать - надо дебажить и ворочать проект, искать причину бага. Могу тольк пожелать удачи


блин - просто жопа.
Создал тестовый проект - там вообще нет вызовов.

А в моем проекте Olly показывает ссылку на 5 вызовов.
Единственное предположение - линкуется какая-то либа, которая при инициализации и дергает CoInitialize.

Ну не с нуля же проект переписывать smile
PM MAIL ICQ   Вверх
Любитель
Дата 6.5.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Какие библиотеки тобой используются? Кроме Qt и Qwt.


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


Опытный
**


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

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



Цитата(Любитель @  6.5.2009,  16:23 Найти цитируемый пост)
Какие библиотеки тобой используются? Кроме Qt и Qwt.

boost

Добавлено через 25 секунд
но он уж точно не должен это делать smile
PM MAIL ICQ   Вверх
zss
Дата 6.5.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Любитель, глядь

http://support.microsoft.com/kb/824480

как я и предполагал - это делают crt-либы

Добавлено через 13 минут и 54 секунды
только выставление описанных там свойств действия не возымела :(

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


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


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

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



Эээ.. Там речь про Managed C++ Applications. У тебя разве С++/CLI? smile Если нет - то эта кб-шка непричём.


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


Опытный
**


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

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



Цитата(Любитель @  7.5.2009,  00:58 Найти цитируемый пост)
Эээ.. Там речь про Managed C++ Applications. У тебя разве С++/CLI? smile Если нет - то эта кб-шка непричём. 


ну вроде здесь про COM и чистый c++ & run-time
Код

When the common language runtime must use the Component Object Model (COM) any time before the user application starts, the common language runtime calls the CoInitializeEx method to initialize the main thread to the multi-threaded apartment (MTA). However, the common language runtime calls the CoInitializeEx method only as required. The common language runtime is not deterministic. Typically, applications that require a single-threaded apartment (STA) for the main thread must instead apply the STAThread attribute at the entry point. Also, in C++ the user entry point (main method and its variants) is not a true managed entry point. The C Run-Time Libraries supply the entry points for console applications and for windows applications.

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


Опытный
**


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

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



Любитель,
нашел

у меня есть библиотека в которой в *.cpp есть следующий глобальный код
Код

class CModule : public CAtlModuleT<CModule> {}
CAtlModule* _pAtlModule = new CModule();
 

в QT приложении я использую из этой библиотеки только описание, находящиеся в *.h
Но в *.h есть 
Код

#import "*.tlb" no_namespase, named_guids 


и этот гад всталяет код, который и вызывает CoInitializeEx cо значением COINIT_MULTITHREADED.
PM MAIL ICQ   Вверх
Любитель
Дата 7.5.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



zss, я так и не понял - ты решил твою проблему? smile


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


Опытный
**


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

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



Цитата(Любитель @  7.5.2009,  19:37 Найти цитируемый пост)
zss, я так и не понял - ты решил твою проблему? 

да - вынес создание глобального _pAtlModule в конструктор использующего его класса

спасибо
PM MAIL ICQ   Вверх
Любитель
Дата 7.5.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ок. В следующий раз ставь, плиз, галку тогда, что вопрсо решён smile

Сейчас я поставил


--------------------
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.2159 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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