Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

UnmanagedMemoryStream, constructeur (Byte*, Int64, Int64, FileAccess)

Initialise une nouvelle instance de la classe UnmanagedMemoryStream à l'aide des valeurs spécifiées pour l'emplacement, la longueur et la quantité totale de la mémoire, et l'accès au fichier.

Cette API n'est pas conforme CLS. 

Espace de noms :  System.IO
Assembly :  mscorlib (dans mscorlib.dll)

[CLSCompliantAttribute(false)]
public UnmanagedMemoryStream(
	byte* pointer,
	long length,
	long capacity,
	FileAccess access
)

Paramètres

pointer
Type : System.Byte*
Pointeur vers un emplacement de la mémoire non managée.
length
Type : System.Int64
Longueur de la mémoire à utiliser.
capacity
Type : System.Int64
Quantité totale de mémoire assignée au flux.
access
Type : System.IO.FileAccess
Une des valeurs de FileAccess.

ExceptionCondition
SecurityException

L'utilisateur n'a pas l'autorisation requise.

ArgumentNullException

La valeur pointer est null.

ArgumentOutOfRangeException

La valeur length est inférieure à zéro.

- ou -

La valeur capacity est inférieure à zéro.

- ou -

La valeur length est supérieure à la valeur capacity.

Le paramètre length définit la quantité de mémoire actuellement utilisée. Lors de l'ajout ou de la lecture des données du flux, la valeur length doit être égale à la quantité de données valides à lire ou à préserver dans le flux. Lors de l'écriture dans le flux, cette valeur doit être égale à zéro.

Le paramètre capacity indique la quantité totale de mémoire disponible. Cette valeur peut décrire une zone dont la longueur est supérieure à celle qui est spécifiée, ou une zone dans laquelle il est possible d'effectuer des ajouts. Toute tentative d'écriture au-delà de cette valeur échouera.

Le paramètre access définit les propriétés CanRead et CanWrite. Notez que le fait de spécifier Write ne garantit pas que le flux soit accessible en écriture. Les paramètres d'accès permettent à l'implémenteur de créer un objet dont l'implémentation peut correspondre au flux actuellement exposé.

L'exemple de code suivant montre comment lire et écrire dans la mémoire non managée à l'aide de la classe UnmanagedMemoryStream. Un bloc de mémoire non managée est alloué et libéré à l'aide de la classe Marshal.



// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

unsafe class TestWriter
{

    static void Main()
	{
		
            // Create some data to read and write.
            byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");

	    // Allocate a block of unmanaged memory and return an IntPtr object.	
            IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);

            // Get a byte pointer from the IntPtr object.
            byte* memBytePtr = (byte*) memIntPtr.ToPointer();

            // Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
            UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);

            // Write the data.
            writeStream.Write(message, 0, message.Length);

            // Close the stream.
            writeStream.Close();

            // Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
            UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);

	    // Create a byte array to hold data from unmanaged memory.
            byte[] outMessage = new byte[message.Length];

            // Read from unmanaged memory to the byte array.
            readStream.Read(outMessage, 0, message.Length);

            // Close the stream.
            readStream.Close();

            // Display the data to the console.
            Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));

            // Free the block of unmanaged memory.
            Marshal.FreeHGlobal(memIntPtr);

            Console.ReadLine();
    }
}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

  • UnmanagedCode 

    pour accéder à la mémoire non managée.

  • SecurityCriticalAttribute 

    exige une confiance totale pour l'appelant immédiat. Ce membre ne peut pas être utilisé par du code partiellement de confiance ou transparent.

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 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft