Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к Excel, проблема с типами Variant 
:(
    Опции темы
Fighter
Дата 22.8.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Делаю по книге "Программирование на Microsoft Visual C++ 6.0 Скота Уингой и Джорджа Шефферда". 
Там в книге у них есть пример подключения к Microsoft Excel. Делаю в точности все что в книге, единственная разница - в то время когда писалась книга был Excel 97, а подключаться я пытаюсь к Excel 2007, соответственно и библиотека типов тогда у них лежала в файле Excel8.olb, а я создаю классы из библиотеки XL5EN32.OLB. 

Вот кусок кода, незавершенного...

Код

    LPDISPATCH pDisp;
    LPUNKNOWN pUnk;
    CLSID clsid;
    TRACE("Входим в CEx25dView::OnExceloleLoad\n");
    BeginWaitCursor();
    ::CLSIDFromProgID(L"Excel.Application", &clsid);
    if (::GetActiveObject(clsid, NULL, &pUnk) == S_OK) {
        VERIFY(pUnk->QueryInterface(IID_IDispatch, (void**) &pDisp) == S_OK);
        m_app.AttachDispatch(pDisp);
        pUnk->Release();
        TRACE("Присоединение завершено\n");
    }
    else {
        if (!m_app.CreateDispatch("Excel.Application")) {
            AfxMessageBox("Excel97 не найден");
        }
        TRACE("создание завершено\n");
    }
    EndWaitCursor();

    LPDISPATCH pRange, pWorkbooks;
    CWnd* pWnd = CWnd::FindWindow("XLMAIN", NULL);
    if (pWnd != NULL) {
        TRACE("Окно эксель найдено");
        pWnd->ShowWindow(SW_SHOWNORMAL);
        pWnd->UpdateWindow();
        pWnd->BringWindowToTop();
    }

    m_app.SetSheetsInNewWorkbook(1);



ТАм у них правда по нескольким функциям этот код разбит но это не суть важно. Вот я дописал до последней строчки кода и попробовал откомпилировать. И на последнюю строчку компилятор ругается вот так:

Код

Compiling...
Ex26aView.cpp
G:\PROGPROJECTS\Ex26a\Ex26aView.cpp(336) : error C2664: 'SetSheetsInNewWorkbook' : cannot convert parameter 1 from 'const int' to 'const struct tagVARIANT &'
        Reason: cannot convert from 'const int' to 'const struct tagVARIANT'
        No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.

Ex26a.exe - 1 error(s), 0 warning(s)


Я понимаю что смысл ругательства в том что он не может преобразовать тип из интеджера в вариант. Но.... Почему у них так написано? И в примере с диска работает, а вот у меня нет. В чем дело?
PM MAIL   Вверх
jonie
Дата 23.8.2010, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 118



Ну поди в vc6-ом были неявные конструкторы у _variant_t .... используйте _variant_t((long)1) - думаю как-то так


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Fighter
Дата 23.8.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дык в книге вот так написано((((((((
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




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


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

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