Marshal.StringToHGlobalAnsi(String) Método

Definição

Copia o conteúdo de um String gerenciado para a memória não gerenciada, convertendo em formato ANSI durante a cópia.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

Parâmetros

s
String

Uma cadeia de caracteres gerenciada a ser copiada.A managed string to be copied.

Retornos

O endereço, na memória não gerenciada, para o qual s foi copiado ou 0 se s for null.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Atributos

Exceções

Não há memória suficiente disponível.There is insufficient memory available.

O parâmetro s excede o comprimento máximo permitido pelo sistema operacional.The s parameter exceeds the maximum length allowed by the operating system.

Exemplos

O exemplo a seguir demonstra como converter o conteúdo de uma classe String gerenciada em memória não gerenciada e depois descartar a memória não gerenciada quando terminar.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 );
    }
}

Comentários

StringToHGlobalAnsi é útil para marshaling personalizado ou ao misturar código gerenciado e não gerenciado.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Como esse método aloca a memória não gerenciada necessária para uma cadeia de caracteres, sempre libere a memória chamando FreeHGlobal.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsi fornece a funcionalidade oposta de Marshal.PtrToStringAnsi.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Esse método copia os caracteres nulos inseridos e inclui um caractere nulo de terminação.This method copies embedded null characters, and includes a terminating null character.

Segurança

SecurityCriticalAttribute
requer confiança total para o chamador imediato.requires full trust for the immediate caller. Este membro não pode ser usado pelo código transparente ou parcialmente confiável.This member cannot be used by partially trusted or transparent code.

Aplica-se a

Veja também