|
Программирование >> Перегруженные имена функций и идентификаторы
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |