Реализация вызова удаленных процедур по технологии 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