Midas запуск процедуры на ApplicationServer
От: sergp  
Дата: 28.11.03 08:48
Оценка:
Знатоки, помогите плищз, как запустить процедуру на ApplicationServer по технологии Midas. C++ Builder. процедура с двумя входными параметрами, или хоть ссылку дайте
Re: Midas запуск процедуры на ApplicationServer
От: KIT75  
Дата: 28.11.03 14:43
Оценка:
Здравствуйте, sergp, Вы писали:

S>Знатоки, помогите плищз, как запустить процедуру на ApplicationServer по технологии Midas. C++ Builder. процедура с двумя входными параметрами, или хоть ссылку Издайте



Наследуем компонент TBaseProvider:
//==============================================================================
//==============================================================================
file.H
//==============================================================================
class PACKAGE TExecProvider : public TBaseProvider
{
private:
bool run;
protected:
public:
System::OleVariant* pParams;

__fastcall TExecProvider(TComponent* Owner);
virtual void __fastcall InternalExecute( const WideString CommandText,
System::OleVariant &Params );
virtual System::OleVariant __fastcall InternalGetParams(TParamTypes Types);
__published:
};

typedef void ( __fastcall *TExecMethod )( TObject*, TExecProvider* );
//==============================================================================
//==============================================================================
//==============================================================================
file.CPP
//==============================================================================
void __fastcall TExecProvider::InternalExecute( const WideString CommandText,
System::OleVariant &Params )
{
if( !run ) {
run = true;
pParams = &Params;
AnsiString ansi = CommandText;
ShortString methodName = ansi;
TExecMethod methodAddr = (TExecMethod)Owner->MethodAddress( methodName );
if( methodAddr ) methodAddr( Owner, this );
else {
ansi = AnsiString( "Метод" ) + ansi + AnsiString( "не найден" );
Params = ansi;
}
run = false;
}
else {
AnsiString st = "Ресурс 'TExecProvider' занят";
Params = st;
}
}
//---------------------------------------------------------------------------
System::OleVariant __fastcall TExecProvider::InternalGetParams(TParamTypes Types)
{
return *pParams;
}
//==============================================================================
//==============================================================================
//==============================================================================
Определяем свои процедуры:

class TRDM_Main : public TCRemoteDataModule
{
__published: // IDE-managed Components

void __fastcall EnterDB( TExecProvider* provider );
void __fastcall LoginOperator( TExecProvider* provider );
void __fastcall LoginAdm( TExecProvider* provider );
void __fastcall GetTimeServer( TExecProvider* provider );
...
};

//==============================================================================
//==============================================================================
//==============================================================================
Примерная реализация
void __fastcall TRDM_Main::GetTimeServer( TExecProvider* provider )
{
*(provider->pParams) = OleVariant( (int)time(0) );
}
//==============================================================================
//==============================================================================
//==============================================================================

Некузяво, но работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.