Реализация вызова удаленных процедур по технологии DCOM

Описание существующих технологий, поддерживающих концепцию распределенных объектных систем. Особенности технологии DCOM. Разработка параметров приложения. Выбор инструмента разработки и его обоснование. Схема взаимодействия для локального приложения.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 05.01.2013
Размер файла 769,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

o->LineTo(X+5,Y-20);

o->MoveTo(X,Y);

o->LineTo(X-5,Y-20);

o->LineTo(X+5,Y-20);

o->LineTo(X,Y);

o->MoveTo(X,Y-20);

o->LineTo(X,Y-30);

X=30;

o->LineTo(X+520,Y-30);

}

//--------------------------------------------------------------------

Matrix.h

#ifndef MatrixH

#define MatrixH

//---------------------------------------------------------------------------

#include "RandGen.h"

class Matrix

{

public:

Matrix();

Matrix(Matrix &m);

~Matrix();

void SetSize(int m, int n);

void Fill(int val);

int FindMax();

int FindMin();

void SetElem(int i, int j, int val);

int GetM();

nt GetN();

int GetElem(int i, int j);

void SetGen(RandGen * pG);

void FillRand();

int Determ();

Matrix& DelLine(int k);

Matrix& DelCol(int k);

private:

int M;

int N;

int ** A;

RandGen* pGen;

};

#endif

Matrix.cpp

#pragma hdrstop

#include <alloc.h>

#include "Matrix.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

Matrix::Matrix()

{

pGen = 0;

SetSize(3, 3);

Fill(0);

}

Matrix::Matrix(Matrix &m)

{

M = m.M;

N = m.N;

A = (int **) malloc(sizeof(int *) * M);

for(int i=0; i<M; i++)

A[i] = (int *) malloc(sizeof(int) * N);

for(int i=0; i<M; i++)

{

for(int j=0; j<N; j++)

A[i][j] = m.A[i][j];

}

}

Matrix::~Matrix()

{

for(int i=0; i<M; i++)

free(A[i]);

free(A);

}

void Matrix::SetSize(int m, int n)

{

M = m;

N = n;

A = (int **) malloc(sizeof(int *) * M);

for(int i=0; i<M; i++)

A[i] = (int *) malloc(sizeof(int) * N);

}

void Matrix::Fill(int val)

{

for(int i=0; i<M; i++)

{

for(int j=0; j<N; j++)

{

A[i][j] = val;

}

}

}

int Matrix::FindMax()

{

int max = A[0][0];

for(int i=0; i<M; i++)

{

for(int j=0; j<N; j++)

{

if(A[i][j] > max)

max = A[i][j];

}

}

return max;

}

int Matrix::FindMin()

{

int min = A[0][0];

for(int i=0; i<M; i++)

{

for(int j=0; j<N; j++)

{

if(A[i][j] < min)

min = A[i][j];

}

}

return min;

}

void Matrix::SetElem(int i, int j, int val)

{

A[i][j] = val;

}

int Matrix::GetM()

{

return M;

}

int Matrix::GetN()

{

return N;

}

int Matrix::GetElem(int i, int j)

{

return A[i][j];

}

void Matrix::SetGen(RandGen * pG)

{

pGen = pG;

}

void Matrix::FillRand()

{

for(int i=0; i<M; i++)

{

for(int j=0; j<N; j++)

{

A[i][j] = pGen->Get();

}

}

}

int Matrix::Determ()

{

int val[16];

if(M != N)

{

//MessageBox("Determinant: Incorrect Matrix Size!\n");

return 0;

}

int value = 0;

switch(M)

{

case 1: return A[0][0];

case 2: return A[0][0]*A[1][1] - A[0][1]*A[1][0];

default:

for(int j=0; j<N; j++)

{

Matrix Temp(*this);

Temp.DelLine(0);Temp.DelCol(j);

if(j%2 == 0)

val[j] = A[0][j] * Temp.Determ();

else

val[j] = -A[0][j] * Temp.Determ();

}

for(int j=0; j<N; j++)

value += val[j];

return value;

}

}

Matrix & Matrix::DelLine(int k)

{

if(k >= M)

{

//printf("DelLine: Incorrect Line Number!\n");

return *this;

}

free(A[k]);

for(int i = k; i<M-1; i++)

A[i] = A[i+1];

M--;

return *this;

}

Matrix & Matrix::DelCol(int k)

{

if(k >= N)

{

//printf("DelCol: Incorrect Column Number!\n");

return *this;

}

for(int i = 0; i<M; i++)

{

for(int j = k; j<N-1; j++)

A[i][j] = A[i][j+1];

}

N--;

return *this;

}

RandGen.h

//---------------------------------------------------------------------------

#ifndef RandGenH

#define RandGenH

//---------------------------------------------------------------------------

class RandGen

{

public:

RandGen();

~RandGen();

void Init();

int Get();

void SetInterval(int i_min, int i_max);

int GetMin();

int GetMax();

private:

int min;

int max;

};

#endif

RandGen.cpp

#pragma hdrstop

#include <stdlib.h>

#include "RandGen.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

RandGen::RandGen()

{

min = 0;

max = 10;

}

RandGen::~RandGen()

{

//TODO: Add your source code here

}

void RandGen::Init()

{

randomize();

}

int RandGen::Get()

{

return random(max - min) + min;

}

void RandGen::SetInterval(int i_min, int i_max)

{

min = i_min;

max = i_max;

}

int RandGen::GetMin()

{

return min;

}

int RandGen::GetMax()

{

return max;

}

View.h

#ifndef ViewH

#define ViewH

//---------------------------------------------------------------------------

#include <graphics.hpp>

#include "Matrix.h"

class View

{

public:

View();

~View();

void Draw(TCanvas * Canvas);

void SetMatrix(Matrix * pM);

int GetSizeX();

int GetSizeY();

void SetSizeX(int size){SizeX = size;}

void SetSizeY(int size){SizeY = size;}

private:

int SizeX;

int SizeY;

Matrix * pMatr;

};

#endif

View.cpp

#pragma hdrstop

#include "View.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

View::View()

{

SizeX = 50;

SizeY = 40;

}

View::~View()

{

//TODO: Add your source code here

}

void View::Draw(TCanvas * Canvas)

{

for(int i=0; i<pMatr->GetM(); i++)

{

for(int j=0; j<pMatr->GetN(); j++)

{

Canvas->Rectangle(SizeX*j, SizeY*i, SizeX*(j+1), SizeY*(i+1));

AnsiString text = pMatr->GetElem(i, j);

int xt = SizeX*j + SizeX/2 - Canvas->TextWidth(text)/2;

int yt = SizeY*i + SizeY/2 - Canvas->TextHeight(text)/2;

Canvas->TextOutA(xt, yt, text);

}

}

}

void View::SetMatrix(Matrix * pM)

{

pMatr = pM;

}

int View::GetSizeX()

{

return SizeX;

}

int View::GetSizeY()

{

return SizeY;

}

OOPAMPAUTOIMPL.h

// Event Support : TRUE

// Default ProgID : Serv.OOPAmpAuto

// Description :

/////////////////////////////////////////////////////////////////////////////

class ATL_NO_VTABLE TOOPAmpAutoImpl :

public CComObjectRootEx<CComSingleThreadModel>,

public CComCoClass<TOOPAmpAutoImpl, &CLSID_OOPAmpAuto>,

public IConnectionPointContainerImpl<TOOPAmpAutoImpl>,

public TEvents_OOPAmpAuto<TOOPAmpAutoImpl>,

public IDispatchImpl<IOOPAmpAuto, &IID_IOOPAmpAuto, &LIBID_Serv>

{

public:

TOOPAmpAutoImpl()

{

}

// Data used when registering Object

//

DECLARE_THREADING_MODEL(otApartment);

DECLARE_PROGID("Serv.OOPAmpAuto");

DECLARE_DESCRIPTION("");

// Function invoked to (un)register object

//

static HRESULT WINAPI UpdateRegistry(BOOL bRegister)

{

TTypedComServerRegistrarT<TOOPAmpAutoImpl>

regObj(GetObjectCLSID(), GetProgID(), GetDescription());

return regObj.UpdateRegistry(bRegister);

}

BEGIN_COM_MAP(TOOPAmpAutoImpl)

COM_INTERFACE_ENTRY(IOOPAmpAuto)

COM_INTERFACE_ENTRY2(IDispatch, IOOPAmpAuto)

COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(TOOPAmpAutoImpl)

CONNECTION_POINT_ENTRY(DIID_IOOPAmpAutoEvents)

END_CONNECTION_POINT_MAP()

// IOOPAmpAuto

public:

STDMETHODIMP TOOPAmpAutoImpl::get_Position(int* Value);

STDMETHODIMP TOOPAmpAutoImpl::set_Position(int Value);

STDMETHODIMP TOOPAmpAutoImpl::get_R(double* Value);

STDMETHODIMP TOOPAmpAutoImpl::set_R(double Value);

STDMETHODIMP TOOPAmpAutoImpl::get_NC(int* Value);

STDMETHODIMP TOOPAmpAutoImpl::set_NC(int Value);

STDMETHOD(get_NC(unsigned* Value));

STDMETHOD(get_Position(long* Value));

STDMETHOD(get_R(unsigned* Value));

STDMETHOD(set_NC(unsigned Value));

STDMETHOD(set_Position(long Value));

STDMETHOD(set_R(unsigned Value));

};

#endif //OOPAmpAutoImplH

OOPAMPAUTOIMPL.cpp

// OOPAMPAUTOIMPL : Implementation of TOOPAmpAutoImpl (CoClass: OOPAmpAuto, Interface: IOOPAmpAuto)

#include <vcl.h>

#include "Main.h"

#pragma hdrstop

#include "OOPAMPAUTOIMPL.H"

// TOOPAmpAutoImpl

STDMETHODIMP TOOPAmpAutoImpl::get_Position(int* Value)

{

try

{ TReostat *Reostat = new TReostat();

*Value = Reostat->GetPosition(); }

catch(Exception &e)

{ return Error(e.Message.c_str(), IID_IOOPAmpAuto); }

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::set_Position(int Value)

{ try

{ TReostat *Reostat = new TReostat();

Reostat->SetPosition(Value);

MainForm->Draw();

}

catch(Exception &e)

{ return Error(e.Message.c_str(), IID_IOOPAmpAuto); }

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::get_R(double* Value)

{ try

{ TReostat *Reostat = new TReostat();

*Value = Reostat->GetR();}

catch(Exception &e)

{ return Error(e.Message.c_str(), IID_IOOPAmpAuto); }

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::set_R(double Value)

{

try

{ TReostat *Reostat = new TReostat();

Reostat->SetR(Value);

MainForm->Label4->Caption = Value;

}

catch(Exception &e)

{ return Error(e.Message.c_str(), IID_IOOPAmpAuto); }

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::get_NC(int* Value)

{ try

{ TReostat *Reostat = new TReostat();

*Value = Reostat->GetNC(); }

catch(Exception &e)

{ return Error(e.Message.c_str(), IID_IOOPAmpAuto); }

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::set_NC(int Value)

{ try

{ TReostat *Reostat = new TReostat();

Reostat->SetNC(Value);

MainForm->Draw();

}

catch(Exception &e)

{ return Error(e.Message.c_str(), IID_IOOPAmpAuto); }

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::get_NC(unsigned* Value)

{

try

{

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_IOOPAmpAuto);

}

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::get_Position(long* Value)

{

try

{

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_IOOPAmpAuto);

}

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::get_R(unsigned* Value)

{

try

{

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_IOOPAmpAuto);

}

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::set_NC(unsigned Value)

{

try

{

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_IOOPAmpAuto);

}

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::set_Position(long Value)

{

try

{

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_IOOPAmpAuto);

}

return S_OK;

};

STDMETHODIMP TOOPAmpAutoImpl::set_R(unsigned Value)

{

try

{

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_IOOPAmpAuto);

}

return S_OK;

};

Клиент:

Unit1.h

TCSpinEdit *CSpinEdit2;

TButton *Button1;

TGroupBox *GroupBox2;

TLabel *Label3;

TLabel *Label4;

TCSpinEdit *CSpinEdit3;

TCSpinEdit *CSpinEdit4;

TButton *Button2;

TGroupBox *GroupBox3;

TLabel *Label5;

TLabel *Label6;

TCSpinEdit *CSpinEdit5;

TCSpinEdit *CSpinEdit6;

TButton *Button3;

TGroupBox *GroupBox4;

TButton *Button4;

TButton *Button5;

TLabel *Label7;

TEdit *Edit1;

TLabel *Label8;

TCSpinEdit *CSpinEdit7;

TLabel *Label9;

TCSpinEdit *CSpinEdit8;

TButton *Button6;

TLabel *Label10;

TEdit *Edit2;

TGroupBox *GroupBox5;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TButton *Button7;

TLabel *Label11;

TButton *Button8;

TButton *Button9;

TButton *Button10;

TButton *Button11;

TEdit *Edit3;

TRadioButton *RadioButton3;

void __fastcall Button9Click(TObject *Sender);

void __fastcall Button10Click(TObject *Sender);

void __fastcall Button11Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button6Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button8Click(TObject *Sender);

void __fastcall Button7Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

private:// User declarations

TCOMIMyMatrix m_object;

public:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Unit1.cpp

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Serv.OleProcedure("RandomFill");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)

{

long value;

Serv.OleProcedure("GetElem", CSpinEdit7->Value,

CSpinEdit8->Value, &value);

Edit2->Text = value;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)

{

long res;

if(RadioButton1->Checked)

Serv.OleProcedure("FindMin", &res);

else if(RadioButton2->Checked)

Serv.OleProcedure("FindMax", &res);

else if(RadioButton3->Checked)

Serv.OleProcedure("FindDet", &res);

Edit3->Text = res;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Serv.OlePropertySet("SizeX", CSpinEdit5->Value);

Serv.OlePropertySet("SizeY", CSpinEdit6->Value);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

char lpBuffer[MAX_COMPUTERNAME_LENGTH + 1];

unsigned long nSize = sizeof(lpBuffer);

GetComputerName(lpBuffer, &nSize);

WideString text = AnsiString().sprintf("Date and time at %s is %s", lpBuffer, DateTimeToStr(Now()));

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

m_object.Unbind();

}

//---------------------------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • Описание технологии asp.net. Страницы веб-приложения, тестирование системы. Описание функциональной, динамической модели системы. Диаграммы вариантов использования, последовательности, база данных приложения. Реализация программы, интерфейс, тестирование.

    курсовая работа [3,2 M], добавлен 30.01.2013

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

    реферат [26,4 K], добавлен 22.06.2011

  • Разработка адресных и технических требований к игре. Написание сценария. Общая концепция разработки приложения. Разработка схем алгоритмов приложения. Игровые технологии. Выбор среды и программированного языка. Описание пользовательского интерфейса.

    курсовая работа [1,6 M], добавлен 14.06.2014

  • Технология распределенных вычислений CORBA, взаимодействие компонентов и архитектура. Основное назначение CORBA и COM. Поддержка операционных систем, предлагаемые службы и масштабируемость. Формальное описание архитектуры и проблемы ее реализации.

    курсовая работа [89,3 K], добавлен 02.12.2013

  • Анализ деятельности подразделения разработки программных продуктов, использующих Web-технологии, в компании ИООО "ЭПАМ Системз". Разработка систем с использованием Web-технологий с помощью программного продукта Oracle Database и технологий Spring, Struts.

    отчет по практике [1,0 M], добавлен 14.04.2014

  • Задачи, которые решают интернет-ресурсы. Классификация интернет-рекламы. Обзор существующих Web-технологий. Язык разработки сценариев PHP. Технология построения интерактивных документов DHTML. Средства и технологии для разработки интернет-ресурса.

    дипломная работа [1,5 M], добавлен 22.11.2015

  • Анализ существующих систем организации аудиосвязи. Протоколы аудиопереачи. Архитектура сетевого взаимодействия. Алгоритм серверного приложения. Структура клиентского приложения. Выбор языка программирования и средств разработки. Требования к системе.

    курсовая работа [1,2 M], добавлен 28.04.2014

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

    дипломная работа [3,4 M], добавлен 12.08.2017

  • Мониторинг сервисов веб-приложения. Проблема отслеживания большого количества сервисов, поддерживающих работу веб-приложения, ее решение с помощью "Service discovery"-инструментов. Применение программного инструмента Consul как клиент-серверной системы.

    статья [184,4 K], добавлен 10.12.2016

  • Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения.

    курсовая работа [355,9 K], добавлен 18.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.