Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

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

 

Date de publication : novembre 2016

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

Cette API n’est pas conforme CLS.

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

[SecurityCriticalAttribute]
[CLSCompliantAttribute(false)]
public unsafe 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.

Exception Condition
SecurityException

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

ArgumentNullException

La valeur de pointer est null.

ArgumentOutOfRangeException

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

ou

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

ou

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

Le length paramètre définit la quantité de mémoire actuellement utilisée. Si la lecture ou l’ajout de données dans le flux, le length valeur doit être égale à la quantité de données valides dans le flux à lire à partir d’ou conservées. Si l’écriture dans le flux de données, cette valeur doit être zéro.

Le capacity paramètre indique la quantité totale de mémoire disponible. Cette valeur peut décrire une région qui est plus longue que la longueur spécifiée ou indiquer une région qui peut être ajoutée à. Toute tentative d’écriture au-delà de cette valeur échouera.

Le access jeux de paramètres la CanRead, et CanWrite Propriétés. Notez que la spécification 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 UnmanagedMemoryStream classe. Un bloc de mémoire non managée est alloué et libéré à l’aide de la Marshal classe.


// 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();
    }
}

UnmanagedCode

for accessing unmanaged memory.

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Plateforme Windows universelle
Disponible depuis 10
.NET Framework
Disponible depuis 2.0
Retour au début
Afficher: