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

Definice

Zkopíruje obsah spravované String do nespravované paměti převod do formátu ANSI jako zkopíruje.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

Parametry

s
String String String String

Spravované řetězec, které se mají zkopírovat.A managed string to be copied.

Návraty

Adresy v nespravované paměti k umístění, kde s byl zkopírovaný nebo 0 v případě s je null.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Výjimky

Není k dispozici dostatek paměti.There is insufficient memory available.

s Parametru překračuje maximální délku povolenou v operačním systému.The s parameter exceeds the maximum length allowed by the operating system.

Příklady

Následující příklad ukazuje, jak převést obsah spravované String třídy nespravované paměti a potom nespravovanou paměť, až budete hotovi.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 );
    }
}

Poznámky

StringToHGlobalAnsi je užitečné pro vlastní zařazování nebo kombinace spravovaného a nespravovaného kódu.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Protože tato metoda přiděluje nespravované paměti vyžadované pro řetězce, vždy uvolnit paměť pomocí volání FreeHGlobal.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsi nabízí opačné funkce Marshal.PtrToStringAnsi.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Tato metoda zkopíruje vložené znaky null a zahrnuje ukončující znak null.This method copies embedded null characters, and includes a terminating null character.

Zabezpečení

SecurityCriticalAttribute
vyžaduje úplný vztah důvěryhodnosti pro bezprostředně volajícího.requires full trust for the immediate caller. Tohoto člena nelze použít v kódu s částečnou důvěryhodností ani v transparentním kódu.This member cannot be used by partially trusted or transparent code.

Platí pro

Viz také