Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 150 151 152 [ 153 ] 154 155 156 ... 210


if (FAILED( hr)) com issue errorex( hr, this, uuidof(this));

Этот способ, безусловно, является универсальным, но могут возникнуть некоторые неудобства. Например, метод MoveNext объекта Recordset ADO возвращает код, который не является ошибкой, а лишь индицирует о достижении конца набора записей. Тем не менее, мы получим исключение. В подобных случаях придётся использовать либо вложенные операторы try {} catch, либо корректировать wrapper, внося обработку исключений непосредственно в тело сгенерированных процедур. В последнем случае, правда, придется подключать файы *.tlh уже обычным способом, через #include. Но делать это никто не запрещает.

Наконец, настало время рассмотреть несколько практических примеров. Приведем четыре примера работы с MS Word, MS Excel, ADO DB и ActiveX Control. Первые три примера будут обычными консольными программами, в последнем примере покажем, как можно заменить класс COleDispatchDriver сгенерированный MFC Class Wizardом на классы полученные директивой #import.

Для первых двух примеров нам понадобится файл следующего содержания:

Office.h

#define Uses MSO2000 #ifdef Uses MSO2000

for MS Office 2000

#import C:\Program Files\Microsoft Office\Office\MSO9.DLL

#import C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB #import C:\Program Files\Microsoft Office\Office\MSWORD9.OLB \

rename( ExitWindows , ExitWindows )

#import C:\Program Files\Microsoft Office\Office\EXCEL9.OLB

rename( DialogBox , DialogBox ) \ rename( RGB , RGB ) \ exclude( IFont , IPicture ) #import C:\Program Files\Common Files\Microsoft

Shared\DAO\DAO360.DLL \

rename( EOF , EndOfFile ) rename( BOF , BegOfFile )

#import C:\Program Files\Microsoft Office\Office\MSACC9.OLB



#else

for MS Office 97

#import C:\Program Files\Microsoft Office\Office\MSO97.DLL

#import C:\Program Files\Common Files\Microsoft

Shared\VBA\VBEEXT1.OLB

#import C:\Program Files\Microsoft

Office\Office\MSWORD8.OLB \

rename( ExitWindows , ExitWindows )

#import C:\Program Files\Microsoft Office\Office\EXCEL8.OLB

rename( DialogBox , DialogBox ) \ rename( RGB , RGB ) \ exclude( IFont , IPicture ) #import C:\Program Files\Common Files\Microsoft

Shared\DAO\DAO350.DLL \

rename( EOF , EndOfFile )

rename( BOF , BegOfFile ) #import C:\Program Files\Microsoft Office\Office\MSACC8.OLB #endif

Этот файл содержит подключение библиотек типов MS Word, MS Excel и MS Access. По умолчанию подключаются библиотеки для MS Office 2000, если на вашем компьютере установлен MS Office 97, то следует закомментировать строчку:

#define Uses MSO2000

Если MS Office установлен в каталог, отличный от C:\Program Files\Microsoft Office\Office\ , то пути к библиотекам также следует подкорректировать. Обратите внимание на атрибут rename, его необходимо использовать, когда возникают конфликты имён свойств и методов библиотеки типов с препроцессором. Например, функция ExitWindows объявлена в файле winuser.h как макрос:

#define ExitWindows(dwReserved,Code) ExitWindowsEx(EWX LOGOFF,0xFFFFFFFF) В результате, там, где препроцессор встретит имя

ExitWindows, он будет пытаться подставлять определение макроса.

Этого можно избежать при использовании атрибута rename,

заменив такое имя на любое другое.



MS Word

console.cpp : Defines the entry point for the console application.

#include stdafx.h #include <stdio.h> #include Office.h

void main()

::CoInitialize(NULL);

try {

using namespace Word;

ApplicationPtr word(L Word.Application );

word->Visible = true;

word->Activate();

создаём новый документ

DocumentPtr wdoc1 = word->Documents->Add();

пишем пару слов RangePtr range = wdoc1->Content; range->LanguageID = wdRussian; range->InsertAfter( napa слов );

сохраняем как HTML

wdoc1->SaveAs(& variant t( C:\\MyDoc\\test.htm ), & variant t(long(wdFormatHTML))); иногда придется прибегать к явному преобразованию типов, т.к. оператор преобразования char* в VARIANT* не определён

открывает документ test.doc DocumentPtr wdoc2 = word->Documents->Open (& variant t( C:\\MyDoc\\test.doc )); вызываем макрос word->Run( Macro1 );

} catch ( com error& er) { char buf[1024];

sprintf(buf, com error:\n



1 ... 150 151 152 [ 153 ] 154 155 156 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика