// Borland C++ Builder
// Copyright (c) 1995, 2005 by Borland Software Corporation
// All rights reserved

// (DO NOT EDIT: machine generated header) 'Objauto.pas' rev: 10.00

#ifndef ObjautoHPP
#define ObjautoHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member functions
#pragma pack(push,8)
#include <System.hpp>	// Pascal unit
#include <Sysinit.hpp>	// Pascal unit
#include <Typinfo.hpp>	// Pascal unit

//-- user supplied -----------------------------------------------------------

namespace Objauto
{
//-- type declarations -------------------------------------------------------
#pragma option push -b-
enum TCallingConvention { ccRegister, ccCdecl, ccPascal, ccStdCall, ccSafeCall };
#pragma option pop

#pragma option push -b-
enum ObjAuto__1 { pfVar, pfConst, pfArray, pfAddress, pfReference, pfOut, pfResult };
#pragma option pop

typedef Set<ObjAuto__1, pfVar, pfResult>  TParamFlags;

typedef void * *PPointer;

typedef Word *PWord;

struct TMethodInfoHeader;
typedef TMethodInfoHeader *PMethodInfoHeader;

#pragma pack(push,1)
struct TMethodInfoHeader
{
	
public:
	Word Len;
	void *Addr;
	System::ShortString Name;
} ;
#pragma pack(pop)

struct TReturnInfo;
typedef TReturnInfo *PReturnInfo;

#pragma pack(push,1)
struct TReturnInfo
{
	
public:
	Byte Version;
	TCallingConvention CallingConvention;
	Typinfo::PTypeInfo *ReturnType;
	Word ParamSize;
} ;
#pragma pack(pop)

struct TParamInfo;
typedef TParamInfo *PParamInfo;

#pragma pack(push,1)
struct TParamInfo
{
	
public:
	TParamFlags Flags;
	Typinfo::PTypeInfo *ParamType;
	Word Access;
	System::ShortString Name;
} ;
#pragma pack(pop)

__interface IMethodHandler;
typedef System::DelphiInterface<IMethodHandler> _di_IMethodHandler;
__interface  INTERFACE_UUID("{4E61C8CD-16CC-4830-B1E4-84F86FBC0D23}") IMethodHandler  : public IInterface 
{
	
public:
	virtual Variant __fastcall Execute(Variant const * Args, const int Args_Size) = 0 ;
	virtual Variant __fastcall InstanceToVariant(System::TObject* Instance) = 0 ;
};

//-- var, const, procedure ---------------------------------------------------
static const Word paEAX = 0x0;
static const Word paEDX = 0x1;
static const Word paECX = 0x2;
static const Word paStack = 0x3;
extern PACKAGE PMethodInfoHeader __fastcall GetMethodInfo(System::TObject* Instance, const System::ShortString &MethodName);
extern PACKAGE Variant __fastcall ObjectInvoke(System::TObject* Instance, PMethodInfoHeader MethodHeader, int const * ParamIndexes, const int ParamIndexes_Size, Variant const * Params, const int Params_Size);
extern PACKAGE System::TMethod __fastcall CreateMethodPointer(const _di_IMethodHandler MethodHandler, Typinfo::PTypeData TypeData);
extern PACKAGE void __fastcall ReleaseMethodPointer(const System::TMethod &MethodPointer);

}	/* namespace Objauto */
using namespace Objauto;
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// Objauto
