Marshal.StringToHGlobalAnsi(String) Метод

Определение

Копирует содержимое управляемого объекта String в неуправляемую память, преобразуя его по мере копирования в формат ANSI.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

Параметры

s
String

Копируемая управляемая строка.A managed string to be copied.

Возвраты

Адрес в неуправляемой памяти, куда скопирована строка s, или значение 0, если строка s имеет значение null.The address, in unmanaged memory, to where s was copied, or 0 if s is null.

Атрибуты

Исключения

Не хватает памяти.There is insufficient memory available.

Параметр s превышает максимальную длину, разрешенную операционной системой.The s parameter exceeds the maximum length allowed by the operating system.

Примеры

В следующем примере показано, как преобразовать содержимое управляемого класса String в неуправляемую память, а затем удалить неуправляемую память по завершении.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 );
    }
}

Комментарии

StringToHGlobalAnsi удобно использовать для настраиваемого маршалирования или смешивания управляемого и неуправляемого кода.StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Поскольку этот метод выделяет неуправляемую память, необходимую для строки, всегда освобождайте память путем вызова FreeHGlobal.Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsi предоставляет функции, противоположные Marshal.PtrToStringAnsi.StringToHGlobalAnsi provides the opposite functionality of Marshal.PtrToStringAnsi.

Этот метод копирует внедренные символы NULL и включает завершающий нуль-символ.This method copies embedded null characters, and includes a terminating null character.

Безопасность

SecurityCriticalAttribute
Требуется полное доверие для немедленного вызывающего объекта.requires full trust for the immediate caller. Этот член не может использоваться частично доверенным или прозрачным кодом.This member cannot be used by partially trusted or transparent code.

Применяется к

Дополнительно