CallingConventions Enumeration
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Defines the valid calling conventions for a method.
This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.
Namespace: System.ReflectionAssembly: mscorlib (in mscorlib.dll)
| Member name | Description | |
|---|---|---|
| Any | Specifies that either the Standard or the VarArgs calling convention may be used. | |
| ExplicitThis | Specifies that the signature is a function-pointer signature, representing a call to an instance or virtual method (not a static method). If ExplicitThis is set, HasThis must also be set. The first argument passed to the called method is still a this pointer, but the type of the first argument is now unknown. Therefore, a token that describes the type (or class) of the this pointer is explicitly stored into its metadata signature. | |
| HasThis | Specifies an instance or virtual method (not a static method). At run-time, the called method is passed a pointer to the target object as its first argument (the this pointer). The signature stored in metadata does not include the type of this first argument, because the method is known and its owner class can be discovered from metadata. | |
| Standard | Specifies the default calling convention as determined by the common language runtime. Use this calling convention for static methods. For instance or virtual methods use HasThis. | |
| VarArgs | Specifies the calling convention for methods with variable arguments. |
The following example finds specific overloads of MethodA, specifying binding constraints, calling conventions, and a variety of argument types.
Note: |
|---|
To run this example, see Building examples that have static TextBlock controls for Windows Phone 8. |
Imports System.Reflection Imports System.Runtime.InteropServices Class Example ' Methods to get: Public Overloads Sub MethodA(ByVal i As Integer, ByVal l As Long) End Sub Public Overloads Sub MethodA(ByVal i() As Integer) End Sub Public Overloads Sub MethodA(ByRef r As Integer) End Sub ' Method that takes an integer and an out parameter. Note that an ' Imports reference is needed to System.Runtime.InteropServices ' for the <OutAttribute>, which can be shortened to <Out>. Public Overloads Sub MethodA(ByVal i As Integer, <Out()> ByRef o As Integer) o = 100 End Sub Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock) Dim mInfo As MethodInfo ' Get MethodA(ByVal i As Integer, ByVal l As Long) mInfo = GetType(Example).GetMethod("MethodA", _ BindingFlags.Public Or BindingFlags.Instance, _ Nothing, _ CallingConventions.Any, _ New Type() {GetType(System.Int32), _ GetType(System.Int64)}, _ Nothing) outputBlock.Text += String.Format("Found method: {0}", mInfo) & vbCrLf ' Get MethodA(ByVal i() As Integer) mInfo = GetType(Example).GetMethod("MethodA", _ BindingFlags.Public Or BindingFlags.Instance, _ Nothing, _ CallingConventions.Any, _ New Type() {GetType(System.Int32())}, _ Nothing) outputBlock.Text += String.Format("Found method: {0}", mInfo) & vbCrLf ' Get MethodA(ByRef r As Integer) mInfo = GetType(Example).GetMethod("MethodA", _ BindingFlags.Public Or BindingFlags.Instance, _ Nothing, _ CallingConventions.Any, _ New Type() {GetType(System.Int32).MakeByRefType}, _ Nothing) outputBlock.Text += String.Format("Found method: {0}", mInfo) & vbCrLf ' Get MethodA(ByVal i As Integer, <Out()> ByRef o As Integer) mInfo = GetType(Example).GetMethod("MethodA", _ BindingFlags.Public Or BindingFlags.Instance, _ Nothing, _ CallingConventions.Any, _ New Type() {GetType(System.Int32), GetType(System.Int32).MakeByRefType}, _ Nothing) outputBlock.Text += String.Format("Found method: {0}", mInfo) & vbCrLf End Sub End Class ' This method produces the following output: ' 'Found method: Void MethodA(Int32, Int32) 'Found method: Void MethodA(Int32[]) 'Found method: Void MethodA(Int32 ByRef) 'Found method: Void MethodA(Int32, Int32 ByRef)
Note: