Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

TypeBuilder.MakePointerType Method

Returns a Type object that represents the type of an unmanaged pointer to the current type.

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)
public override Type MakePointerType()

Return Value

Type: System.Type
A Type object that represents the type of an unmanaged pointer to the current type.

The MakePointerType method provides a way to generate pointer types for parameter lists.

NoteNote

Using Microsoft intermediate language (MSIL) syntax, if the current TypeBuilder represents MyType, then the type returned by this method would be MyType*.

The following code example creates a dynamic module, an abstract type named Sample, and an abstract method named TestMethod. TestMethod takes a ref parameter (ByRef in Visual Basic) of type Sample, a pointer to type Sample, and an array of type Sample. It returns a two-dimensional array of type Sample. The code example saves the dynamic module to disk, so you can examine it with the Ildasm.exe (IL Disassembler).

using System;
using System.Reflection;
using System.Reflection.Emit;
using Microsoft.VisualBasic;

public class Example
{
    public static void Main()
    {
        // Define a dynamic assembly to contain the sample type. The 
        // assembly will not be run, but only saved to disk, so 
        // AssemblyBuilderAccess.Save is specified. 
        //
        AppDomain myDomain = AppDomain.CurrentDomain;
        AssemblyName myAsmName = new AssemblyName("MakeXxxTypeExample");
        AssemblyBuilder myAssembly = myDomain.DefineDynamicAssembly(
            myAsmName, 
            AssemblyBuilderAccess.Save);

        // An assembly is made up of executable modules. For a single- 
        // module assembly, the module name and file name are the same  
        // as the assembly name.  
        //
        ModuleBuilder myModule = myAssembly.DefineDynamicModule(
            myAsmName.Name, 
            myAsmName.Name + ".dll");

        // Define the sample type.
        TypeBuilder myType = myModule.DefineType(
            "Sample", 
            TypeAttributes.Public | TypeAttributes.Abstract);

        // Define a method that takes a ref argument of type Sample, 
        // a pointer to type Sample, and an array of Sample objects. The 
        // method returns a two-dimensional array of Sample objects. 
        // 
        // To create this method, you need Type objects that represent the 
        // parameter types and the return type. Use the MakeByRefType,  
        // MakePointerType, and MakeArrayType methods to create the Type 
        // objects. 
        //
        Type byRefMyType = myType.MakeByRefType();
        Type pointerMyType = myType.MakePointerType();
        Type arrayMyType = myType.MakeArrayType();
        Type twoDimArrayMyType = myType.MakeArrayType(2);

        // Create the array of parameter types.
        Type[] parameterTypes = {byRefMyType, pointerMyType, arrayMyType};

        // Define the abstract Test method. After you have compiled 
        // and run this code example code, you can use ildasm.exe  
        // to open MakeXxxTypeExample.dll, examine the Sample type, 
        // and verify the parameter types and return type of the 
        // TestMethod method. 
        //
        MethodBuilder myMethodBuilder = myType.DefineMethod(
            "TestMethod", 
            MethodAttributes.Abstract | MethodAttributes.Virtual 
                | MethodAttributes.Public,
            twoDimArrayMyType,
            parameterTypes);

        // Create the type and save the assembly. For a single-file  
        // assembly, there is only one module to store the manifest  
        // information in. 
        //
        myType.CreateType();
        myAssembly.Save(myAsmName.Name + ".dll");
    }
}

.NET Framework

Supported in: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.