Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Marshal.ReadInt16 (IntPtr, Int32)

 

Data di pubblicazione: ottobre 2016

Legge un intero con segno a 16 bit a un offset specificato dalla memoria non gestita.

Spazio dei nomi:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

[SecurityCriticalAttribute]
public static short ReadInt16(
	IntPtr ptr,
	int ofs
)

Parametri

ptr
Type: System.IntPtr

Indirizzo di base nella memoria non gestita da cui leggere.

ofs
Type: System.Int32

Offset di byte supplementare, aggiunto al parametro ptr prima della lettura.

Valore restituito

Type: System.Int16

Intero con segno a 16 bit letto dalla memoria non gestita a un offset specificato.

Exception Condition
AccessViolationException

Indirizzo di base (ptr) più il byte di offset (ofs) produce un indirizzo null o non valido.

ReadInt16 Consente l'interazione diretta con una matrice con segno a 16 bit non gestita, eliminando l'inconveniente di copiare un'intera matrice non gestita (utilizzando Marshal.Copy) in una matrice gestita separata prima di leggere i valori di elementi.

La lettura da posizioni di memoria non allineate è supportata.

Nell'esempio riportato di seguito viene illustrato come leggere e scrivere in una matrice non gestita usando il ReadInt16 e WriteInt16 metodi.

static void ReadWriteInt16()
{
    // Allocate unmanaged memory. 
    int elementSize = 2;
    IntPtr unmanagedArray = Marshal.AllocHGlobal(10 * elementSize);

    // Set the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Marshal.WriteInt16(unmanagedArray, i * elementSize, ((Int16)(i + 1)));
    }
    Console.WriteLine("Unmanaged memory written.");

    Console.WriteLine("Reading unmanaged memory:");
    // Print the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(Marshal.ReadInt16(unmanagedArray, i * elementSize));
    }

    Marshal.FreeHGlobal(unmanagedArray);

    Console.WriteLine("Done. Press Enter to continue.");
    Console.ReadLine();
}

Nell'esempio seguente viene illustrato come utilizzare il ReadInt16 per leggere il valore di una funzione non gestita short variabile.


using namespace System;
using namespace System::Runtime::InteropServices;

void main()
{
    // Create an unmanaged short pointer.
    short * myShort;
    short tmp = 42;
    // Initialize it to another value.
    myShort = &tmp;

    // Read value as a managed Int16.
    Int16 ^ myManagedVal = Marshal::ReadInt16((IntPtr) myShort, 0);

    // Display the value to the console.
    Console::WriteLine(myManagedVal);
}

SecurityCriticalAttribute

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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: