Russian Qt Forum
Ноябрь 01, 2024, 16:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программа падает при работе с объектом  (Прочитано 3835 раз)
dd
Гость
« : Июль 24, 2011, 13:29 »

Пишу программу подключения к 1с v8.2.
Там все просто, подключаемся к зарегистрированному объекту, обращаемся к нему.
Все работает, только возможно у меня не хватает понимания работы с COM.

Чтобы описать проблему, сделал очищенный вариант программы. Создаю чистый проект.
В конструкторе главного окна пишу:

Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QTimer *pTimer = new QTimer(this);
    pTimer->setSingleShot(false);
    connect(pTimer, SIGNAL(timeout()), this, SLOT(slotAxConnect()));
    pTimer->setInterval(1000 * 1);
    pTimer->start();
}

Далее сам слот:

Код:
void MainWindow::slotAxConnect()
{
    if(m_AxObject.isNull())     // m_AxObject - QAxObject, член класса главного окна
    {
        bool res = m_AxObject.setControl("V82.COMConnector");  // подключаемся к объекту

        if(!res)
        {
            qDebug() << "Can't connect to 'V82.COMConnector'. Exiting.";
            return;
        }
    }

    qDebug() << m_AxObject.isNull();  // на данном этапе подключились удачно

    if(!m_AxObject.isNull())
    {
        QAxObject *pServ = m_AxObject.querySubObject("Connect(QString)", QVariant(tr("_TROKA_POFKLUCHENIYA_")));   // эта строка
    }
}

_TROKA_POFKLUCHENIYA_ - это стандартная строка подключения.
Что в ней находится не важно, допустим она неправильная или пустая вообще.
По логике программы m_AxObject.querySubObject возвращает NULL по таймеру постоянно (строка специально неправильно указана).
Все в прядке.

Но если в взять мышкой окно и передвинуть, программа вылетает с ошибкой. Также падает при закрытии программы.
Если вышеуказанную строку закомментировать, этого не происходит.

Прикол в том, что если указать строку подключения нормально, все подключается и работает. Но в какой-то момент все равно падает.
Если строка не правильно указана, просто функция возвращает NULL и все. Может быть надо еще как-то эту ситуацию обрабатывать?

Спасибо за ответы.
« Последнее редактирование: Июль 24, 2011, 13:41 от dd » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 21.