Директива #import
От: Игорь Ткачёв Россия linq2db.com
Дата: 29.09.01 22:10
Оценка: 491 (14) +1
Статья:
Директива #import
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.


Авторы:
Игорь Ткачёв

Аннотация:
В данной статье приводится объяснение работы директивы #import компилятора Visual C++ и даны примеры её использования с MS Word, MS Excel, ADO DB и ActiveX Control.
Если нам не помогут, то мы тоже никого не пощадим.
Глюки с примерами
От: null  
Дата: 30.10.02 10:51
Оценка:
Тупо скопировал оба оффисных примера из текста — получил такие ошибки:

..\debug\msacc9.tlh(19931) : error C2146: syntax error : missing ';' before identifier 'Connection'
..\debug\msacc9.tlh(19931) : error C2501: '_ConnectionPtr' : missing storage-class or type specifiers
..\debug\msacc9.tlh(19931) : error C2501: 'Connection' : missing storage-class or type specifiers
..\debug\msacc9.tlh(19981) : error C2146: syntax error : missing ';' before identifier 'GetConnection'
..\debug\msacc9.tlh(19981) : error C2501: '_ConnectionPtr' : missing storage-class or type specifiers
..\debug\msacc9.tlh(24391) : error C2143: syntax error : missing ';' before 'tag::id'
..\debug\msacc9.tlh(24391) : error C2501: '_ConnectionPtr' : missing storage-class or type specifiers
..\debug\msacc9.tlh(24391) : error C2497: '_ConnectionPtr' : 'implementation_key' can only be applied to function declarations
..\debug\msacc9.tlh(24391) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

Когда закомментировал импорт msacc9 — все сработало как задумано. Вот чешу репу и думаю важно ли это. Извините, если что не так сказал — никогда этим не пользовался, просто потребовалось прочитать эксельский файл.
А какие OLB и DLL подключать для Office XP
От: illario Россия  
Дата: 26.08.02 13:53
Оценка:
Проблемы возникли с тем, что в оффисе ХР нет вообще файла аналога MSO9.DLL как у оффиса 2000.
Прошу помочь с импортом для оффиса ХР
Всегда внимательно изучайте файлы *.tlh
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.08.02 11:11
Оценка:
"Всегда внимательно изучайте файлы *.tlh. Отчасти они могут заменить документацию, а если её нет, то это единственный источник информации (кроме, конечно, OLE/COM Object Viewer)."

И не только для ознакомления.
Иногда в первых строчках содержится информация зависимостей данной библиотеки от других.
Например для #import "D:/Program Files/Microsoft Office/Office/MSWORD8.OLB" файл MSWORD8.tlh содержит
//
// Cross-referenced type libraries:
//
//  #import "D:\Program Files\Microsoft Office\Office\MSO97.DLL"
//  #import "D:\Program Files\Common Files\Microsoft Shared\VBA\VBEEXT1.OLB"

Поэтому нужно добавлять эти кросс-референсед библиотеки перед импортом Вордовсой библиотеки.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Как сделать универсально?
От: server_mouse Беларусь  
Дата: 21.03.02 03:44
Оценка:
Т.е. что-бы один ехе работал и с 97 и с 2000 офисом.
#define это конечно класно, но не делать же два отдельных билда....
Если человек программист, то это надолго.
Исключение в Recordset::MoveNext
От: Gonobobel  
Дата: 23.11.01 01:19
Оценка:
А кто мешает вызывать не метод обертки, а прямо Recordset::raw_MoveNext? Тогда исключение генерироваться не будет.
Не работает с Office 97
От: Gambler  
Дата: 30.09.01 22:10
Оценка:
E:\...\ImportTest.cpp(27) : error C2065: 'wdFormatHTML' : undeclared identifier
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Re: Как сделать универсально?
От: Kaa76  
Дата: 04.04.02 00:31
Оценка:
Можно оформить необходимые функции для работы с офисом в отдельную DLL и на версии разбить только ее. Не универсально, но почти...
Re: Исключение в Recordset::MoveNext
От: CooLer Россия http://bestsoft.far.ru
Дата: 23.11.01 09:37
Оценка:
К счастью, исключения не будет в любом случае. К сожалению, некоторый текст в статье не соответствует примерам и требует корректировки. Правильно работающий объект и его правильное использование не должны возбуждать исключения, в примере для ADO это сделано и фразу "Например, метод MoveNext объекта Recordset ADO возвращает код, который не является ошибкой, а лишь индицирует о достижении конца набора записей." можно вполне считать obsolete :)
"Выше голову" — сказл палач, надевая петлю
Re: Не работает с Office 97
От: CooLer Россия http://bestsoft.far.ru
Дата: 01.10.01 01:09
Оценка:
Скорее всего, в нём ещё нет такой возможности, поэтому и не работает.
"Выше голову" — сказл палач, надевая петлю
Re: Как сделать универсально?
От: lextasy Украина www.mira-tech.com.ua
Дата: 15.02.04 16:31
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Т.е. что-бы один ехе работал и с 97 и с 2000 офисом.

_>#define это конечно класно, но не делать же два отдельных билда....

Чтобы все было универсально, не следует использовать директиву #import.
Обоснование: Технология COM изначально предназначена для того, чтобы обеспечить прозрачность размещения COM объектов. Поэтому использование явных межмодульных ссылок является даунгрейдом на концептуальном уровне. Если в приложении используются жесткие межмодульные ссылки, то это приложение фактически является монолитным, со всеми вытекающими отсюда последствиями типа DLL HELL и т.п.

К счастью, в случае MS Word можно обойтись диспинтерфейсами, используя позднее связывание. В этом случае также не нужно будет на каждый пук перекомпилировать по 12 MB исходников.
Есть грамотная либа, которая позволяет из VC++ работать с диспинтерфейсами практически на том же уровне комфорта, что и из VB. Попробуй из нее класс dispatch_w- это т.н. интеллектуальный указатель, специально для доступа к диспинтерфейсам, используя позднее связывание. В документации есть пример, как это сделать (в примере ведется работа с MSDEV IDE, в случае MS Office принцип тот же )
Re: Как в Excel поменять контекстное меню и обработать событ
От: rol Украина  
Дата: 17.02.04 12:53
Оценка:
Здравствуйте, Игорь Ткачёв.

Не могли бы вы выложитьь примерчик того же самого, но для MS Excel (Office XP)

Спасибо
Re: Как сделать универсально?
От: Jakop Россия https://wmspanel.com
Дата: 19.02.04 08:26
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Т.е. что-бы один ехе работал и с 97 и с 2000 офисом.

_>#define это конечно класно, но не делать же два отдельных билда....

Если ты соберешь софтину с использованием import и закомментируешь #define Uses_MSO2000
, то все будет работать и под 97 ,2000 и под 2003 офисы и пока Microsoft будет придерживаться
основного принцыпа в разработке COM объектов — "существующие интерфейсы не меняются —
для добавления функционала внедряются новые"
Именно благодаря этому игры юзающие DirectX 7.0 идут там где стоит DirectX 9.0.....
Так что при разработке учитывай самую раннюю версию сервера которы хочешь использовать и
все.....
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re: Директива #import
От: Богатырь Россия  
Дата: 14.10.06 05:38
Оценка:
Здравствуйте, Игорь Ткачёв, Вы писали:

ИТ>Статья:

ИТ>Директива #import
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.


ИТ>Авторы:

ИТ> Игорь Ткачёв

ИТ>Аннотация:

ИТ>В данной статье приводится объяснение работы директивы #import компилятора Visual C++ и даны примеры её использования с MS Word, MS Excel, ADO DB и ActiveX Control.

У меня Office 2003, там нет таких файлов как excel9.olb, mso9.dll. Похожих на них файлов тоже нет.
Скажите, что надо отметить при установке offic`а что бы они были ???
Re[2]: Директива #import
От: SchweinDeBurg Россия http://zarezky.spb.ru/
Дата: 14.10.06 10:25
Оценка:
Здравствуйте, Богатырь, Вы писали:

Б>У меня Office 2003, там нет таких файлов как excel9.olb, mso9.dll. Похожих на них файлов тоже нет.

Б>Скажите, что надо отметить при установке offic`а что бы они были ???

MS любит это дело менять... Наилучший для Вас "выход" ИМХО — это запустить OLE/COM Object Viewer и им все посмотреть. Вот у меня, например, "Microsoft Excel 11.0 Object Library (Ver 1.5)" наличествует в файле "XL5EN32.OLB", лежащем в "Microsoft Office\Office11".
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[2]: Директива #import
От: ламмму Украина http://itjob.kharkov.ua
Дата: 14.10.06 11:28
Оценка:
Здравствуйте, Богатырь, Вы писали:

Б>У меня Office 2003, там нет таких файлов как excel9.olb, mso9.dll. Похожих на них файлов тоже нет.

Б>Скажите, что надо отметить при установке offic`а что бы они были ???

#import "C:\Program Files\Common Files\Microsoft Shared\office11\mso.dll" rename("DocumentProperties", "DocumentPropertiesXL") rename("RGB", "RBGXL")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6ext.olb"
#import "C:\Program Files\Microsoft Office\Office11\EXCEL.EXE" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") rename("ReplaceText", "ReplaceTextXL") rename("CopyFile", "CopyFileXL") no_dual_interfaces
<b>bold text</b>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.