Platform::Agile Class
Represents an object that has a MashalingBehavior=Standard as an agile object, which greatly reduces the chances for runtime threading exceptions. The Agile<T>
enables the non-agile object to call, or be called from, the same or a different thread. For more information, see Threading and Marshaling.
Syntax
template <typename T>
class Agile;
Parameters
T
The typename for the non-agile class.
Remarks
Most of the classes in the Windows Runtime are agile. An agile object can call, or be called by, an in-proc or out-of-proc object in the same or a different thread. If an object is not agile, wrap the non-agile object in a Agile<T>
object, which is agile. Then the Agile<T>
object can be marshaled, and the underlying non-agile object can be used.
The Agile<T>
class is a native, standard C++ class and requires agile.h
. It represents the non-agile object and the Agile object's context. The context specifies an agile object's threading model and marshaling behavior. The operating system uses the context to determine how to marshal an object.
Members
Public Constructors
Name | Description |
---|---|
Agile::Agile | Initializes a new instance of the Agile class. |
Agile::~Agile Destructor | Destroys the current instance of the Agile class. |
Public Methods
Name | Description |
---|---|
Agile::Get | Returns a handle to the object that is represented by the current Agile object. |
Agile::GetAddressOf | Reinitializes the current Agile object, and then returns the address of a handle to an object of type T . |
Agile::GetAddressOfForInOut | Returns the address of a handle to the object represented by the current Agile object. |
Agile::Release | Discards the current Agile object's underlying object and context. |
Public Operators
Name | Description |
---|---|
Agile::operator-> | Retrieves a handle to the object represented by the current Agile object. |
Agile::operator= | Assigns the specified value to the current Agile object. |
Inheritance Hierarchy
Object
Agile
Requirements
Minimum supported client: Windows 8
Minimum supported server: Windows Server 2012
Namespace: Platform
Header: agile.h
Agile::Agile Constructor
Initializes a new instance of the Agile class.
Syntax
Agile();
Agile(T^ object);
Agile(const Agile<T>& object);
Agile(Agile<T>&& object);
Parameters
T
A type specified by the template typename parameter.
object
In the second version of this constructor, an object used to initialize a new Agile instance. In the third version, the object that is copied to the new Agile instance. In the fourth version, the object that is moved to the new Agile instance.
Remarks
The first version of this constructor is the default constructor. The second version initializes new Agile instance class from the object specified by the object
parameter. The third version is the copy constructor. The fourth version is the move constructor. This constructor cannot throw exceptions.
Agile::~Agile Destructor
Destroys the current instance of the Agile class.
Syntax
~Agile();
Remarks
This destructor also releases the object represented by the current Agile object.
Agile::Get Method
Returns a handle to the object that is represented by the current Agile object.
Syntax
T^ Get() const;
Return Value
A handle to the object that is represented by the current Agile object.
The type of the return value is actually an undisclosed internal type. A convenient way to hold the return value is to assign it to a variable that is declared with the auto
type deduction keyword. For example, auto x = myAgileTvariable->Get();
.
Agile::GetAddressOf Method
Reinitializes the current Agile object, and then returns the address of a handle to an object of type T
.
Syntax
T^* GetAddressOf() throw();
Parameters
T
A type specified by the template typename parameter.
Return Value
The address of a handle to an object of type T
.
Remarks
This operation releases the current representation of an object of type T
, if any; reinitializes the Agile object's data members; acquires the current threading context; and then returns the address of a handle-to-object variable that can represent a non-agile object. To cause an Agile class instance to represent an object, use the assignment operator (Agile::operator=) to assign the object to the Agile class instance.
Agile::GetAddressOfForInOut Method
Returns the address of a handle to the object represented by the current Agile object.
Syntax
T^* GetAddressOfForInOut() throw();
Parameters
T
A type specified by the template typename parameter.
Return Value
The address of a handle to the object represented by the current Agile object.
Remarks
This operation acquires the current threading context and then returns the address of a handle to the underlying the object.
Agile::Release Method
Discards the current Agile object's underlying object and context.
Syntax
void Release() throw();
Remarks
The current Agile object's underlying object and context are discarded, if they exist, and then the value of the Agile object is set to null.
Agile::operator->
Operator
Retrieves a handle to the object represented by the current Agile object.
Syntax
T^ operator->() const throw();
Return Value
A handle to the object represented by the current Agile object.
This operator actually returns an undisclosed internal type. A convenient way to hold the return value is to assign it to a variable that is declared with the auto
type deduction keyword.
Agile::operator= Operator
Assigns the specified object to the current Agile object.
Syntax
Agile<T> operator=( T^ object ) throw();
Agile<T> operator=( const Agile<T>& object ) throw();
Agile<T> operator=( Agile<T>&& object ) throw();
T^ operator=( IUnknown* lp ) throw();
Parameters
T
The type specified by the template typename.
object
The object or handle to an object that is copied or moved to the current Agile object.
lp
The IUnknown interface pointer of a object.
Return Value
A handle to an object of type T
Remarks
The first version of the assignment operator copies a handle to a reference type to the current Agile object. The second version copies a reference to an Agile type to the current Agile object. The third version moves an Agile type to the current Agile object. The fourth version moves a pointer to a COM object to the current Agile object.
The assignment operation automatically persists the context of the current Agile object.