Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Айхрень...
 Аватар для Paulie
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077

Excel 2010 и защищённый режим

08.02.2011, 16:22. Показов 3028. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В проекте Visual C++ импортирую офисные библиотеки для доступа к Excel посредством COM.

Всё как в примерах:

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
28
29
30
31
32
33
34
35
36
#pragma warning( disable : 4278 )
#pragma warning( disable : 4146 )
    //The following #import imports the IDTExtensibility2 interface based on it's LIBID
    //#import "libid:AC0714F2-3D04-11D1-AE7D-00A0C90F26F4" version("1.0") lcid("0")  raw_interfaces_only named_guids
 
    //The following #import imports MSO based on it's LIBID
    //#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" version("2.2") lcid("0") raw_interfaces_only named_guids
 
    #define MSO         "C:\\Program Files\\Common Files\\Microsoft Shared\\Office14\\MSO.DLL"
    #define VBE6EXT     "c:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
    #define EXCEL       "c:\\Program Files\\Microsoft Office\\Office14\\excel.exe"
 
#import MSO named_guids \
    rename("RGB","_RGB")                                                                \
    rename("DocumentProperties","_DocumentProperties")                                  \
    rename("FindText","_FindText")                                                      \
    no_function_mapping                                                                 \
    rename_namespace("Office")
 
using namespace Office;
 
#import VBE6EXT  no_function_mapping
//using namespace VBAIDE;
 
#import EXCEL \
    rename("RGB","_RGB")\
    rename("DocumentProperties","_DocumentProperties")\
    rename("FindText","_FindText")\
    rename("DialogBox","_DialogBox")\
    no_function_mapping\
    rename_namespace("Excel")
 
using namespace Excel;
 
#pragma warning( default : 4146 )
#pragma warning( default : 4278 )
Работаю с Excel 2010 - в который ключена новая возможность открытия докментов в защищённом режиме.
Необходимо реализовать открытие документов вэтом самом режиме (обычное Workbooks.Open() генерирует исключение и вылетает, если документ защищён).
Поэтому решил пойти таким путём:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hResult = ExcelApp.CreateInstance("Excel.Application");
 
if (!SUCCEEDED(hResult))
    throw ("Excel not found");
ExcelApp->Visible[0] = VARIANT_FALSE;
 
printf("Excel loaded success!!!\n\n");
 
PVWs = ExcelApp->ProtectedViewWindows;
pViewWindow = PVWs->Open("C:\\In\\asdf.xls");
printf("Workbook opened success\n\n");
 
Book = pViewWindow->GetWorkbook();
 
Sheet = Book->ActiveSheet;
Программа падает на последней строке данного кода...

C++
1
Необработанное исключение в "0x6c330000" в "TestExcel.exe": 0xC0000005: Access violation.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&_result    0x0018fa98  IDispatch * *
    0x00000000  IDispatch *
        IUnknown    {...}   IUnknown
            __vfptr CXX0030: ошибка: невозможно вычислить выражение   
    VT_BSTR 8   int
 
_result 0x00000000  IDispatch *
    IUnknown    {...}   IUnknown
        __vfptr CXX0030: ошибка: невозможно вычислить выражение   
 
this    0x00349ecc  Excel::_Workbook * const
    IDispatch   {...}   IDispatch
        IUnknown    {...}   IUnknown
            __vfptr 0x7695b100  *
                [0] 0x7695ff28  *
                [1] 0x7695ff1d  *
                [2] 0x7695ff12  *
И ссылается на функцию из файла Office.tli:
C++
1
2
3
4
5
inline _bstr_t DataLabel::GetNumberFormat ( ) {
    BSTR _result = 0;
    _com_dispatch_method(this, 0xc1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&_result, NULL);
    return _bstr_t(_result, false);
}
Что-то я не нашёл решения данной проблемы... и не совсем догоняю причины сего...
Попробовал тоже сделать на VBA непосредственно в экселе, там всё прошло ОК...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2011, 16:22
Ответы с готовыми решениями:

Защищенный режим DOS - С++
Нужна помощь!!! Надо написать программу на С++ для защищенного режима DOS. В проге надо записать данные в переменную до 100 мб а потом...

Защищенный режим
Доброе время суток, помогите с таким заданием, заранее большое спасибо: - проверка присутствия сегмента; - проверка защиты от загрузки...

Защищённый режим ОС
Надеюсь, я верно выбрал раздел на форуме :) Меня интересует такой вопрос... Каким образом приложения типа ArtMoney могут получать доступ к...

2
Айхрень...
 Аватар для Paulie
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
11.02.2011, 10:27  [ТС]
И чего - совсем совсем идей нет?
0
Айхрень...
 Аватар для Paulie
306 / 176 / 7
Регистрация: 02.06.2009
Сообщений: 1,077
03.03.2011, 12:57  [ТС]
Отметил следующее поведение

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
28
29
        Excel::_ApplicationPtr ExcelApp("Excel.Application");
        hResult = ExcelApp.CreateInstance("Excel.Application");
        if (!SUCCEEDED(hResult))
            throw ("Excel not found");
 
        ExcelApp->Visible[0] = VARIANT_FALSE;
        printf("Excel loaded success!!!\n\n");
 
        Excel::ProtectedViewWindowsPtr PVWs(0);
        Excel::ProtectedViewWindowPtr pViewWindow(0);
        
        PVWs = ExcelApp->GetProtectedViewWindows();
        pViewWindow = PVWs->Open("C01.xls");
        printf("Workbook opened success\n\n");
 
        Excel::_WorkbookPtr book = pViewWindow->Edit();
        RangePtr R = ExcelApp->Range["D18"];
//В этом printf всё отрабатывает на УРА!
        printf( "string = %s\n%s\n", (char *)(_bstr_t)R->Item[1, 1], (char *)ExcelApp->GetWorkbooks()->Item[1]->FullName);
 
//В следующем Printf краш программы, генерится ошибка:
//0xC0000005: Access violation
        printf( "string = %s", book->FullName);
 
 
        pViewWindow->Close();//Здесь падает, если закомментировать - всё ок
        ExcelApp->Quit();
        
        printf("\n\nExcel closed\n\n\n");
В МСДН нашёл заметку к свойству ProtectedViewWindow::Workbook, что не работает в изолированном режиме...
ПОлучается, что из-за этого?
Но ведь если получить доступ через ExcelApp->Workbooks->Item[1] - фактически это тоже самое, что и ProtectedViewWindow::Workbook... Хотя, в том же МСДН написано, что ссылается последний - на какое-то иной объект, не Excel::Workbook...
Хотя в tlh файлах:
Excel::WorkbookPtr ProtectedViewWindow::Workbook.........

Кто-нибудь вообще с этим работал?

Буду пока работать через ExcelApp, но интересно бы знать Ваше мнение, мнение тех, ктос подобным работал.

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2011, 12:57
Помогаю со студенческими работами здесь

защищенный режим
а как можно изменить длину сегмента (предел) и потом снова считать его? Написать процедуру, меняющую в защищенном режиме предел ...

Защищённый режим
Приветствую. Мне нужно написать программу, которая выполняет 3 действия в защищённом режиме: 1. Циклически выводить английский...

защищенный режим
Как преобразовать программу из формата .COM в формат .EXE.?

защищенный режим
люди разъясните кто знает.надо переключить проц в защищенный режим работы. часть кода code segment ...... db 0eah ;(1)машинный...

Защищенный режим asm
Здравствуйте! Имеется программка в Реальном режиме, необходимо перевести ее в защищенный. Подскажите, как это сделать? Сама программа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru