Marshal.StringToHGlobalAuto(String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将托管 String 的内容复制到非托管内存,并在需要时转换为 ANSI 格式。
public:
static IntPtr StringToHGlobalAuto(System::String ^ s);
public static IntPtr StringToHGlobalAuto (string? s);
public static IntPtr StringToHGlobalAuto (string s);
[System.Security.SecurityCritical]
public static IntPtr StringToHGlobalAuto (string s);
static member StringToHGlobalAuto : string -> nativeint
[<System.Security.SecurityCritical>]
static member StringToHGlobalAuto : string -> nativeint
Public Shared Function StringToHGlobalAuto (s As String) As IntPtr
参数
- s
- String
要复制的托管字符串。
返回
IntPtr
nativeint
非托管内存中将字符串复制到其中的地址;如果 s
为 null
,则为 0。
- 属性
例外
没有足够的可用内存。
示例
以下示例演示如何将托管 String 类的内容转换为非托管内存,然后在完成后释放非托管内存。
using namespace System;
using namespace System::Runtime::InteropServices;
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::StringToHGlobalAuto(managedString).ToPointer();
// Pass the string to an unmanaged API.
// Always free the unmanaged string.
Marshal::FreeHGlobal(IntPtr(stringPointer));
return 0;
}
注解
StringToHGlobalAuto 可用于自定义封送处理或在混合托管和非托管代码时使用。 由于此方法分配字符串所需的非托管内存,因此请始终通过调用 FreeHGlobal释放内存。 此方法提供 的相反功能 Marshal.PtrToStringAuto。
此方法复制嵌入的空字符,并包含终止 null 字符。