Marshal.StringToHGlobalAnsi(String) Metoda

Definicja

Kopiuje zawartość zarządzanego String w pamięci niezarządzanej, konwertując do formatu ANSI w miarę jego kopiowania.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

Zarządzany ciąg, który ma zostać skopiowany.A managed string to be copied.

Zwraca

Adres w pamięci niezarządzanej, do której skopiowano s, lub 0, jeśli s jest null.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Atrybuty

Wyjątki

Za mało dostępnej pamięci.There is insufficient memory available.

Parametr s przekracza maksymalną dozwoloną długość systemu operacyjnego.The s parameter exceeds the maximum length allowed by the operating system.

Przykłady

W poniższym przykładzie pokazano, jak przekonwertować zawartość klasy Managed String na niezarządzaną pamięć, a następnie usunąć niezarządzaną pamięć po zakończeniu.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 );
    }
}

Uwagi

StringToHGlobalAnsi jest przydatne w przypadku organizowania niestandardowego lub podczas mieszania kodu zarządzanego i niezarządzanego.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Ponieważ ta metoda przydziela niezarządzaną pamięć wymaganą dla ciągu, należy zawsze zwolnić pamięć, wywołując FreeHGlobal.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsi zapewnia odwrotną funkcjonalność Marshal.PtrToStringAnsi.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Ta metoda kopiuje osadzone znaki null i zawiera kończący znak null.This method copies embedded null characters, and includes a terminating null character.

Zabezpieczenia

SecurityCriticalAttribute
Wymaga pełnego zaufania do bezpośredniego obiektu wywołującego.requires full trust for the immediate caller. Ten element członkowski nie może być używany przez częściowo zaufany lub przejrzysty kod.This member cannot be used by partially trusted or transparent code.

Dotyczy

Zobacz też