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

Définition

Copie le contenu d’un objet String managé dans la mémoire non managée, avec conversion au format ANSI pendant la copie.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

Paramètres

s
String String String String

Chaîne managée à copier.A managed string to be copied.

Retours

Adresse, dans la mémoire non managée, où s a été copié, ou 0 si s est null.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Exceptions

Il n’y a pas suffisamment de mémoire disponible.There is insufficient memory available.

Le paramètre s dépasse la longueur maximale autorisée par le système d'exploitation.The s parameter exceeds the maximum length allowed by the operating system.

Exemples

L’exemple suivant montre comment convertir le contenu d’une classe managée String en mémoire non managée, puis supprimer la mémoire non managée lorsque vous avez terminé.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 );
    }
}

Remarques

StringToHGlobalAnsiest utile pour le marshaling personnalisé ou pour mélanger du code managé et du code non managé.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Étant donné que cette méthode alloue la mémoire non managée requise pour une chaîne, libérez toujours la mémoire FreeHGlobalen appelant.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsifournit les fonctionnalités opposées Marshal.PtrToStringAnside.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Cette méthode copie les caractères null incorporés et comprend un caractère null de fin.This method copies embedded null characters, and includes a terminating null character.

Sécurité

SecurityCriticalAttribute
requiert une confiance totale pour l’appelant immédiat.requires full trust for the immediate caller. Ce membre ne peut pas être utilisé par du code de confiance partielle ou transparent.This member cannot be used by partially trusted or transparent code.

S’applique à

Voir aussi