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

Definition

Kopiert den Inhalt eines verwalteten String in den nicht verwalteten Speicher und konvertiert ihn beim Kopieren in das ANSI-Format.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

Parameter

s
String String String String

Eine zu kopierende verwaltete Zeichenfolge.A managed string to be copied.

Gibt zurück

Die Adresse im nicht verwalteten Arbeitsspeicher, an die s kopiert wurde, oder 0, wenn s gleich null ist.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Ausnahmen

Es ist nicht genügend Arbeitsspeicher verfügbar.There is insufficient memory available.

Der s-Parameter übersteigt die vom Betriebssystem zugelassene maximale Länge.The s parameter exceeds the maximum length allowed by the operating system.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie Sie den Inhalt einer verwalteten String Klasse in den nicht verwalteten Speicher konvertieren und anschließend den nicht verwalteten Arbeitsspeicher verwerfen.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 );
    }
}

Hinweise

StringToHGlobalAnsiist nützlich für das benutzerdefinierte Marshalling oder das Mischen von verwaltetem und nicht verwaltetem Code.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Da diese Methode den für eine Zeichenfolge erforderlichen nicht verwalteten Arbeitsspeicher belegt, wird der Arbeitsspeicher von FreeHGlobalimmer freigegeben, indem aufgerufen wird.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsistellt die gegenüberliegende Marshal.PtrToStringAnsiFunktionalität von bereit.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Diese Methode kopiert eingebettete NULL-Zeichen und schließt ein abschließendes NULL-Zeichen ein.This method copies embedded null characters, and includes a terminating null character.

Sicherheit

SecurityCriticalAttribute
erfordert volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer.requires full trust for the immediate caller. Dieser Member kann nicht von teilweise vertrauenswürdigem oder transparentem Code verwendet werden.This member cannot be used by partially trusted or transparent code.

Gilt für:

Siehe auch