Marshal::StringToHGlobalAnsi Method (String^)
Copies the contents of a managed String into unmanaged memory, converting into ANSI format as it copies.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- s
-
Type:
System::String^
A managed string to be copied.
Return Value
Type: System::IntPtrThe address, in unmanaged memory, to where s was copied, or 0 if s is null.
| Exception | Condition |
|---|---|
| OutOfMemoryException | There is insufficient memory available. |
| ArgumentOutOfRangeException | The s parameter exceeds the maximum length allowed by the operating system. |
StringToHGlobalAnsi is useful for custom marshaling or when mixing managed and unmanaged code. Because this method allocates the unmanaged memory required for a string, always free the memory by calling FreeHGlobal. StringToHGlobalAnsi provides the opposite functionality of Marshal::PtrToStringAnsi.
This method copies embedded null characters, and includes a terminating null character.
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; }
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Windows Phone
Available since 8.1