Отчёт о лабораторной работе №3 «Применение протоколов связи приложений dde и ole» Преподаватель: Романенко С. А




Скачать 61.99 Kb.
НазваниеОтчёт о лабораторной работе №3 «Применение протоколов связи приложений dde и ole» Преподаватель: Романенко С. А
Дата публикации24.03.2013
Размер61.99 Kb.
ТипОтчет
odtdocs.ru > Информатика > Отчет
Министерство Образования Российской Федерации

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра МО ЭВМ


Отчёт о лабораторной работе №3

«Применение протоколов связи приложений DDE и OLE»

Преподаватель: Романенко С.А.

Выполнил: студент гр. 3351

Ерёменок А.В.

Санкт-Петербург

2007

  1. Цель работы


    Освоить приемы использования протоколов связи приложений DDE и OLE.
  2. Выполнение

    1. Знакомство с возможностями DDE и OLE с помощью Visual Basic


      1. На Visual Basic for Application написать макрос, который с помощью DDE создает новую группу на рабочем столе и в ней новый программный элемент

Sub CreateProgramGroup()

Dim ch As Integer

ch = DDEInitiate("progman", "progman")

DDEExecute ch, "[CreateGroup(""eav"")]"

DDEExecute ch, "[ShowGroup(""eav"")]"

DDEExecute ch, "[AddItem(""c:\Program Files\Microsoft Office\OFFICE\WINWORD.EXE"", ""Microsoft Word"")]"

DDEExecute ch, "[AddItem(""c:\Program Files\Microsoft Office\OFFICE\EXCEL.EXE"", ""Microsoft Excel"")]"

DDETerminate ch

        End Sub

      1. На Visual Basic for Application написать макрос, который с помощью DDE загружает в Excel файл с тестовой электронной таблицей, считывает и записывает в нее данные, закрывает файл

Sub EditExcelBook()

Dim Str As String

exCh = DDEInitiate("Excel", "System")

DDEExecute exCh, "[Open(""C:\test.xls"")]"

DDEExecute exCh, "^{HOME}"

For i = 1 To 10

DDEExecute exCh, " - " & i & " - " & "{Enter}"

Next i

DDEExecute exCh, "[Save]"

DDEExecute exCh, "[Close]"

DDETerminate exCh



        End Sub

      1. На Visual Basic for Application (в Excel) написать макрос который с помощью OLE Automation запускает произвольное приложение и сохраняет в ячейках Excel информацию из него. В отчете объяснить отличия DDE от OLE Automation


Sub CopyFromWordViaOLE()

Set objWord = CreateObject("Word.Application")

objWord.Documents.Open ("C:\test.doc")

For i = 1 To objWord.ActiveDocument.Words.Count

Cells(i, 1) = objWord.ActiveDocument.Words(i)

Next i

End Sub
    1. ^

      Создание приложений с поддержкой OLE на C++


      1. На Visual C++ с помощью OLE Automation реализовать в приложении операции из разд. 2.1.1 и 2.1.2

      2. Дополнить приложение по индивидуальному заданию из л/р 2 возможностями OLE контейнера, OLE сервера, OLE сервера автоматизации



  1. OLE контейнер

    Позволяет отображать объекты из других приложений, поддерживающих этот протокол. Его работа осуществляется с помощью класса

class CSketcherCntrItem : public COleClientItem

Объекты этого класса содержатся в контейнере, реализованном в COleServerDoc, который наследуется классом, реализующим разрабатываемое приложение.

Значит, помимо отрисовки элементов своего контейнера, необходимо теперь отрисовывать еще и сторонние элементы.
void CSketcherView::OnDraw(CDC* pDC)

{

CSketcherDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

// draw the OLE items from the list

POSITION pos = pDoc->GetStartPosition();

while (pos != NULL)

{

// draw the item

CSketcherCntrItem* pItem = (CSketcherCntrItem*)pDoc->GetNextItem(pos);
pItem->Draw(pDC, pItem->m_rect);
// draw the tracker over the item

CRectTracker tracker;

SetupTracker(pItem, &tracker);

tracker.Draw(pDC);

}

_handler->onDraw(pDC);

}


  1. ^ OLE сервер

    Позволяет отображать объекты из разрабатываемого приложения в других приложениях, поддерживающих этот протокол. Его работа осуществляется с помощью класса class CSketcherSrvrItem : public CDocObjectServerItem.

    Объекты этого класса также содержатся в контейнере, реализованном в COleServerDoc.

    Для соответствия представлений в стороннем приложении и в нашем, отрисовка в нем должна повторять отрисовку элементов контейнеров нашего приложения.

    BOOL CSketcherSrvrItem::OnDraw(CDC* pDC, CSize& rSize)

{

// Remove this if you use rSize

UNREFERENCED_PARAMETER(rSize);
CSketcherDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);
pDC->SetMapMode(MM_ANISOTROPIC);

CSize sizeDoc = pDoc->GetDocSize();

//sizeDoc.cy = -sizeDoc.cy;

pDC->SetWindowOrg(0,0);

pDC->SetWindowExt(sizeDoc);

isInitialized = true;

// draw the OLE items from the list

POSITION pos = pDoc->GetStartPosition();

while (pos != NULL)

{

CSketcherCntrItem* pItem = (CSketcherCntrItem*)pDoc->GetNextItem(pos);

pItem->Draw(pDC, pItem->m_rect);

}
Iterator* iter = pDoc->getShapeContainer()->getNewIterator();

while (iter->hasNext())

{

Ribble* ribble = iter->next();

ribble->get__vertex1()->Draw(pDC);

ribble->get__vertex2()->Draw(pDC);
CPoint start = ribble->get__vertex1()->GetBoundRect().CenterPoint();

CPoint end = ribble->get__vertex2()->GetBoundRect().CenterPoint();

CLine* visibleRibble = new CLine(start, end, GREEN);

visibleRibble->Draw(pDC);

}

return TRUE;

}

  1. ^ OLE автоматизация

    Является способом передачи команд от одного приложения к другому. Для ее реализации необходимо:

  • создать для приложения особый интерфейс (генерируется средствами Microsoft)

[ uuid(209B83CE-2FA3-4A8C-9C22-869FF0BA2652) ]

dispinterface ISketcher

{

properties:

// NOTE - ClassWizard will maintain property information here.

// Use extreme caution when editing this section.

//{{AFX_ODL_PROP(CSketcherDoc)

//}}AFX_ODL_PROP

methods:

// NOTE - ClassWizard will maintain method information here.

// Use extreme caution when editing this section.

//{{AFX_ODL_METHOD(CSketcherDoc)

//##ModelId=4770E20D0122

[id(1)] boolean deleteElement(BSTR key);

//##ModelId=4770E20D0130

[id(2)] void showWindow();

//##ModelId=47728C0B0280

[id(3)] void drawTextInOval(float x, float y, BSTR content, float r1, float r2);

//##ModelId=47728C0B02AF

[id(4)] void drawText(float x, float y, BSTR content);

//##ModelId=47728C0B02C1

[id(5)] void drawRectangle(float x, float y, float height, float width);

//##ModelId=47728C0B02E0

[id(6)] void drawOval(float x, float y, float r1, float r2);

//##ModelId=47728C0B030E

[id(7)] void addRibble(BSTR id1, BSTR id2);

//##ModelId=47728C0B0311

[id(8)] void removeRibble(BSTR id1, BSTR id2);

//}}AFX_ODL_METHOD
};
// Class information for CSketcherDoc

//##ModelId=4770E20D0114

[ uuid(4F9D716E-9E7B-4E9D-9A00-316F404C89D2) ]

coclass Document

{

//##ModelId=4770E20D0116

[default] dispinterface ISketcher;

};

  • в нем при помощи вспомогательного синтаксиса описать команды, которые будут выполняться разрабатываемым приложением (см. выше)

  • в приложении, отправляющем команды, вектор параметров должен быть сформирован согласно сигнатуре вызываемой функции

void OleDriver::drawTextInOval( float x, float y, LPCTSTR content, float r1, float r2 )

{

const BYTE params[] = VTS_R4 VTS_R4 VTS_BSTR VTS_R4 VTS_R4;

InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, params, x, y, content, r1, r2);

}



  1. ^ Примеры работы:




















  1. Вывод


В ходе лабораторной работы освоены навыки создание приложений с возможностями OLE-сервера, контейнера и автоматизации.

Добавить документ в свой блог или на сайт

Похожие:

Отчёт о лабораторной работе №2 «Разработка приложений с использованием...
Освоить приемы создания приложений типа Model-View-Controller при помощи библиотеки mfc

Отчёт о лабораторной работе №2 «Изучение понятия сопроцессов и виртуальных...
Написать программу, устанавливающую виртуальные связи между тремя сопроцессами на одном процессоре

Отчёт о лабораторной работе №3 «Анализ операционных графовых моделей...
Для задачи обработки данных, рассматривавшейся в лабораторных работах 1-2, построить управляющий граф программы с нагруженными дугами,...

Отчёт по лабораторной работе на тему «3d графика»
В данной лабораторной работе использовалась программа Autodesk 3ds Max 2009 и Adobe Photoshop cs4

Отчет по лабораторной работе №9 по курсу «компьютерная графика» Студент...
Вариант 28**: Забить пробный гвоздь в тестовую доску (прямоугольную в поперечном сечении)

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Отчёт о лабораторной работе №2 «Исследование системы массового обслуживания...
Используя пакет gpss составить программу и провести моделирование простейшей системы массового обслуживания (смо)

Отчёт о лабораторной работе №1 «Исследование характеристик датчика...
Используя пакет gpss составить программу для исследования стандартных датчиков псевдослучайных (далее случайных) чисел с квазиравномерным...

Отчёт о лабораторной работе №4 «Разработка экспертной системы с использованием...
Провести создание нечеткой экспертной системы для определения размера чаевых. Провести проверку работы созданной системы

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница