Marshal.StringToHGlobalAnsi-Methode: (String)
Veröffentlicht: Oktober 2016
Kopiert den Inhalt eines verwalteten String in den nicht verwalteten Speicher und konvertiert ihn beim Kopieren in das ANSI-Format.
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Syntax
[SecurityCriticalAttribute]
public static IntPtr StringToHGlobalAnsi(
string s
)
public:
[SecurityCriticalAttribute]
static IntPtr StringToHGlobalAnsi(
String^ s
)
[<SecurityCriticalAttribute>]
static member StringToHGlobalAnsi :
s:string -> nativeint
<SecurityCriticalAttribute>
Public Shared Function StringToHGlobalAnsi (
s As String
) As IntPtr
Parameter
s
Type: System.StringEine zu kopierende verwaltete Zeichenfolge.
Rückgabewert
Type: System.IntPtr
Die Adresse im nicht verwalteten Arbeitsspeicher, an die s kopiert wurde, oder 0, wenn s gleich null ist.
Ausnahmen
Exception | Condition |
---|---|
OutOfMemoryException | Es ist nicht genügend Arbeitsspeicher verfügbar. |
ArgumentOutOfRangeException | Die s Parameter überschreitet die maximale Länge vom Betriebssystem. |
Hinweise
StringToHGlobalAnsi ist hilfreich beim benutzerdefinierten Marshalling und beim Kombinieren von verwaltetem und nicht verwaltetem Code. Da diese Methode den nicht verwalteten Speicher für eine Zeichenfolge erforderlich belegt wird, müssen Sie den Speicher immer freigeben, durch Aufrufen von FreeHGlobal.StringToHGlobalAnsi Stellt die Umkehrfunktion von Marshal.PtrToStringAnsi.
Diese Methode kopiert eingebetteten Null-Zeichen und ein abschließendes Null-Zeichen enthält.
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie der Inhalt eines verwalteten konvertiert String -Klasse in nicht verwalteten Speicher und dann den nicht verwalteten Speicher anschließend verwerfen.
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 );
}
}
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;
}
Sicherheit
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.
Versionsinformationen
Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Windows Phone
Verfügbar seit 8.1
Siehe auch
FreeCoTaskMem
PtrToStringAnsi
Marshal-Klasse
System.Runtime.InteropServices-Namespace
Zurück zum Anfang