Marshal.StringToHGlobalAnsi(String) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
복사할 때 ANSI 형식으로 변환하여 관리되는 String의 내용을 관리되지 않는 메모리로 복사합니다.
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
매개 변수
- s
- String
복사할 관리되는 문자열입니다.
반환
nativeint
관리되지 않는 메모리에서 s
가 복사된 주소이거나 s
가 null
인 경우 0입니다.
- 특성
예외
사용 가능한 메모리가 부족한 경우
s
매개 변수가 운영 체제에서 허용되는 최대 길이를 초과하는 경우
예제
다음 예제에서는 관리 String 되는 클래스의 내용을 관리되지 않는 메모리로 변환한 다음, 완료되면 관리되지 않는 메모리를 삭제하는 방법을 보여 줍니다.
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);
}
}
설명
StringToHGlobalAnsi 는 사용자 지정 마샬링에 유용하거나 관리 코드와 비관리 코드를 혼합할 때 유용합니다. 이 메서드는 문자열에 필요한 관리되지 않는 메모리를 할당하므로 항상 를 호출 FreeHGlobal하여 메모리를 해제합니다. StringToHGlobalAnsi 는 의 반대 기능을 Marshal.PtrToStringAnsi제공합니다.
이 메서드는 포함된 null 문자를 복사하고 종료 null 문자를 포함합니다.
적용 대상
추가 정보
.NET