Marshal.StringToHGlobalAnsi(String) Marshal.StringToHGlobalAnsi(String) Marshal.StringToHGlobalAnsi(String) Marshal.StringToHGlobalAnsi(String) Method

Definizione

Copia il contenuto di un oggetto String gestito nella memoria non gestita, effettuando contemporaneamente la conversione nel formato ANSI.Copies the contents of a managed String into unmanaged memory, converting into ANSI format as it copies.

public:
 static IntPtr StringToHGlobalAnsi(System::String ^ s);
[System.Security.SecurityCritical]
public static IntPtr StringToHGlobalAnsi (string s);
static member StringToHGlobalAnsi : string -> nativeint
Public Shared Function StringToHGlobalAnsi (s As String) As IntPtr

Parametri

s
String String String String

Stringa gestita da copiare.A managed string to be copied.

Restituisce

Indirizzo, nella memoria non gestita, in cui è stato copiato s, oppure 0 se s è null.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Eccezioni

La memoria disponibile è insufficiente.There is insufficient memory available.

Il parametro s supera la lunghezza massima consentita dal sistema operativo.The s parameter exceeds the maximum length allowed by the operating system.

Esempi

Nell'esempio seguente viene illustrato come convertire il contenuto di una classe gestita String nella memoria non gestita e quindi eliminare la memoria non gestita al termine dell'operazione.The following example demonstrates how to convert the contents of a managed String class to unmanaged memory and then dispose of the unmanaged memory when done.

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

#include <iostream>                                                 // for printf


int main()
{
    // Create a managed string.
    String^ managedString = "Hello unmanaged world (from the managed world).";

    // Marshal the managed string to unmanaged memory.
    char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();

    printf("stringPointer = %s\n", stringPointer);

    // Always free the unmanaged string.
    Marshal::FreeHGlobal(IntPtr(stringPointer));

    return 0;
}
using System;
using System.Runtime.InteropServices;

class MainFunction
{
    static void Main()
    {
    Console.WriteLine("\nStringToGlobalAnsi\n");

    // Create a managed string.
    String  managedString = "I am a managed String";
    Console.WriteLine("1) managedString = " + managedString );

    // Marshal the managed string to unmanaged memory.
    IntPtr stringPointer = (IntPtr)Marshal.StringToHGlobalAnsi(managedString);
    Console.WriteLine("2) stringPointer = {0}", stringPointer );

    // Get the string back from unmanaged memory
    String RetrievedString = Marshal.PtrToStringAnsi( stringPointer);
    Console.WriteLine("3) Retrieved from unmanaged memory = " + RetrievedString );

    // Always free the unmanaged string.
    Marshal.FreeHGlobal(stringPointer);

    // IntPtr handle value is still the same:
    Console.WriteLine("4) stringPointer = " + stringPointer );

    // However, it contains no data after being freed:
    String RetrievedString2 = Marshal.PtrToStringAnsi( stringPointer);
    Console.WriteLine("5) RetrievedString2 = " + RetrievedString2 );
    }
}

Commenti

StringToHGlobalAnsi è utile per il marshalling personalizzato o per la combinazione di codice gestito e non gestito.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Poiché questo metodo alloca la memoria non gestita necessaria per una stringa, liberare sempre la memoria chiamando FreeHGlobal.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsi fornisce la funzionalità opposta di Marshal.PtrToStringAnsi.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Questo metodo copia i caratteri null incorporati e include un carattere null di terminazione.This method copies embedded null characters, and includes a terminating null character.

Sicurezza

SecurityCriticalAttribute
richiede l'attendibilità totale per il chiamante immediato.requires full trust for the immediate caller. Questo membro non può essere utilizzato da codice parzialmente attendibile o trasparente.This member cannot be used by partially trusted or transparent code.

Si applica a

Vedi anche