Bagikan melalui


Marshal.StringToHGlobalAnsi(String) Metode

Definisi

Menyalin konten yang dikelola String ke dalam memori yang tidak dikelola, mengonversi ke format ANSI saat disalin.

public:
 static IntPtr StringToHGlobalAnsi(System::String ^ s);
[System.Security.SecurityCritical]
public static IntPtr StringToHGlobalAnsi (string s);
public static IntPtr StringToHGlobalAnsi (string? s);
public static IntPtr StringToHGlobalAnsi (string s);
[<System.Security.SecurityCritical>]
static member StringToHGlobalAnsi : string -> nativeint
static member StringToHGlobalAnsi : string -> nativeint
Public Shared Function StringToHGlobalAnsi (s As String) As IntPtr

Parameter

s
String

String terkelola yang akan disalin.

Mengembalikan

IntPtr

nativeint

Alamat, dalam memori yang tidak dikelola, ke tempat s disalin, atau 0 jika s adalah null.

Atribut

Pengecualian

Tidak tersedia cukup memori.

Parameter s melebihi panjang maksimum yang diizinkan oleh sistem operasi.

Contoh

Contoh berikut menunjukkan cara mengonversi konten String kelas terkelola ke memori yang tidak dikelola lalu membuang memori yang tidak dikelola setelah selesai.

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;
using System.Threading;

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, the data may be cleared after the memory is freed, depending on whether the memory allocated to stringPointer
        // has been reclaimed or not. Uncommenting the following line (Thread.Sleep(1000)) increases the likelihood of the memory being reclaimed.
        // Thread.Sleep(1000);
        String RetrievedString2 = Marshal.PtrToStringAnsi(stringPointer);
        Console.WriteLine("5) RetrievedString2 = " + RetrievedString2);
    }
}

Keterangan

StringToHGlobalAnsi berguna untuk marshaling kustom atau saat mencampur kode yang dikelola dan tidak dikelola. Karena metode ini mengalokasikan memori tidak terkelola yang diperlukan untuk string, selalu bebaskan memori dengan memanggil FreeHGlobal. StringToHGlobalAnsi menyediakan fungsionalitas yang berlawanan dari Marshal.PtrToStringAnsi.

Metode ini menyalin karakter null yang disematkan, dan menyertakan karakter null yang mengakhiri.

Berlaku untuk

Lihat juga