Marshal.StringToHGlobalAnsi(String) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Yönetilen String bir belleğin içeriğini yönetilmeyen belleğe kopyalar ve kopyalanırken ANSI biçimine dönüştürür.
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
Parametreler
- s
- String
Kopyalanacak yönetilen dize.
Döndürülenler
nativeint
Yönetilmeyen bellekteki adres, kopyalandığı yere s
veya ise s
null
0.
- Öznitelikler
Özel durumlar
Kullanılabilir bellek yetersiz.
parametresi, s
işletim sisteminin izin verdiği uzunluk üst sınırını aşıyor.
Örnekler
Aşağıdaki örnekte, yönetilen String bir sınıfın içeriğini yönetilmeyen belleğe dönüştürme ve bittiğinde yönetilmeyen belleğin atılması gösterilmektedir.
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);
}
}
Açıklamalar
StringToHGlobalAnsi özel hazırlama için veya yönetilen ve yönetilmeyen kodu karıştırırken kullanışlıdır. Bu yöntem bir dize için gereken yönetilmeyen belleği ayırdığından, çağırarak FreeHGlobalbelleği her zaman boşaltın. StringToHGlobalAnsi , işlevinin tam tersini Marshal.PtrToStringAnsisağlar.
Bu yöntem eklenmiş null karakterleri kopyalar ve sonlandırıcı bir null karakter içerir.