Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

UnmanagedMarshal (Clase)

Nota: esta API ya está obsoleta.

Representa a la clase que describe cómo calcular las referencias de un campo de código administrado a código no administrado. Esta clase no puede heredarse.

System.Object
  System.Reflection.Emit.UnmanagedMarshal

Espacio de nombres:  System.Reflection.Emit
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ObsoleteAttribute("An alternate API is available: Emit the MarshalAs custom attribute instead. http://go.microsoft.com/fwlink/?linkid=14202")]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class UnmanagedMarshal

El tipo UnmanagedMarshal expone los siguientes miembros.

  NombreDescripción
Propiedad públicaBaseTypeObtiene un tipo base no administrado. Esta propiedad es de sólo lectura.
Propiedad públicaElementCountObtiene un elemento numérico. Esta propiedad es de sólo lectura.
Propiedad públicaGetUnmanagedTypeIndica un tipo no administrado. Esta propiedad es de sólo lectura.
Propiedad públicaIIDGuidObtiene un GUID. Esta propiedad es de sólo lectura.
Arriba

  NombreDescripción
Método públicoMiembro estáticoDefineByValArrayEspecifica una matriz de longitud fija (ByValArray) para calcular las referencias al código no administrado.
Método públicoMiembro estáticoDefineByValTStrEspecifica una cadena de un búfer de matriz fija (ByValTStr) para calcular las referencias al código no administrado.
Método públicoMiembro estáticoDefineLPArrayEspecifica una matriz LPArray para calcular las referencias al código no administrado. La longitud de LPArray se determina en tiempo de ejecución según el tamaño de la matriz real para la que se han calculado las referencias.
Método públicoMiembro estáticoDefineSafeArrayEspecifica una matriz SafeArray para calcular las referencias al código no administrado.
Método públicoMiembro estáticoDefineUnmanagedMarshalEspecifica un tipo determinado para el que se van a calcular las referencias al código no administrado.
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

En el ejemplo de código se muestra la solución para este tipo obsoleto.

El proceso de cálculo de referencias consiste en el empaquetado y desempaquetado de parámetros con el fin de permitir que se realicen llamadas remotas a procedimientos. Durante el proceso de cálculo de referencias, un campo puede sufrir cambios relacionados con la conversión de formato cuando el formato del tipo administrado es distinto del formato del tipo no administrado correspondiente. Por ejemplo, puede que se desee calcular las referencias de un tipo String como un tipo BSTR no administrado. Algunas conversiones de formato se controlan automáticamente por el motor de ejecución. Para reemplazar este comportamiento predeterminado, se debe utilizar la clase UnmanagedMarshal con el fin de definir la conversión de formato.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el siguiente valor de propiedad Resources: MayLeakOnAbort. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

En el ejemplo de código siguiente se muestra el código del reemplazo para el tipo UnmanagedMarshal obsoleto. En el ejemplo se emite que un ensamblado de un solo módulo denominado EmitMarshalAs.dll, que contiene un tipo denominado Sample. El tipo tiene un método denominado Test, con un parámetro de tipo String. En el ejemplo de código se aplica MarshalAsAttribute con UnmanagedType.BStr al parámetro.

Puede utilizar Ildasm.exe (Desensamblador de IL) para examinar el ensamblado emitido y observar si el parámetro está marcado marshal(bstr).


using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.InteropServices;

public class Example
{
    public static void Main()
    {
        AppDomain myDomain = AppDomain.CurrentDomain;
        AssemblyName myAsmName = new AssemblyName("EmitMarshalAs");

        AssemblyBuilder myAssembly = 
            myDomain.DefineDynamicAssembly(myAsmName, 
                AssemblyBuilderAccess.RunAndSave);

        ModuleBuilder myModule = 
            myAssembly.DefineDynamicModule(myAsmName.Name, 
               myAsmName.Name + ".dll");

        TypeBuilder myType = 
            myModule.DefineType("Sample", TypeAttributes.Public);

        MethodBuilder myMethod = 
            myType.DefineMethod("Test", MethodAttributes.Public,
                null, new Type[] { typeof(string) });


        // Get a parameter builder for the parameter that needs the 
        // attribute, using the HasFieldMarshal attribute. In this
        // example, the parameter is at position 0 and has the name
        // "arg".
        ParameterBuilder pb = 
            myMethod.DefineParameter(0, 
               ParameterAttributes.HasFieldMarshal, "arg");

        // Get the MarshalAsAttribute constructor that takes an
        // argument of type UnmanagedType.
        //
        ConstructorInfo ci = 
            typeof(MarshalAsAttribute).GetConstructor(
                new Type[] { typeof(UnmanagedType) });

        // Create a CustomAttributeBuilder representing the attribute,
        // specifying the necessary unmanaged type. In this case, 
        // UnmanagedType.BStr is specified.
        //
        CustomAttributeBuilder cabuilder = 
            new CustomAttributeBuilder(
                ci, new object[] { UnmanagedType.BStr });

        // Apply the attribute to the parameter.
        //
        pb.SetCustomAttribute(cabuilder);


        // Emit a dummy method body.
        ILGenerator il = myMethod.GetILGenerator();
        il.Emit(OpCodes.Ret);

        Type finished = myType.CreateType();
        myAssembly.Save(myAsmName.Name + ".dll");
    }
}


.NET Framework

Compatible con: 1.1, 1.0
Obsoleto (advertencia del compilador) en 4.5.2
Obsoleto (advertencia del compilador) en 4.5.1
Obsoleto (advertencia del compilador) en 4.5
Obsoleto (advertencia del compilador) en 4
Obsoleto (advertencia del compilador) en 3.5
Obsoleto (advertencia del compilador) en 3.5 SP1
Obsoleto (advertencia del compilador) en 3.0
Obsoleto (advertencia del compilador) en 3.0 SP1
Obsoleto (advertencia del compilador) en 3.0 SP2
Obsoleto (advertencia del compilador) en 2.0
Obsoleto (advertencia del compilador) en 2.0 SP1
Obsoleto (advertencia del compilador) en 2.0 SP2

.NET Framework Client Profile

Obsoleto (advertencia del compilador) en 4
Obsoleto (advertencia del compilador) en 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 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft