Marshal.StructureToPtr Método

Definição

Sobrecargas

Name Description
StructureToPtr(Object, IntPtr, Boolean)
Obsoleto.

Transfere dados de um objeto gerido para um bloco de memória não gerido.

StructureToPtr<T>(T, IntPtr, Boolean)

Faz o escalão de dados de um objeto gerido de um tipo especificado para um bloco de memória não gerido.

StructureToPtr(Object, IntPtr, Boolean)

Atenção

StructureToPtr(Object, IntPtr, Boolean) may be unavailable in future releases. Instead, use StructureToPtr<T>(T, IntPtr, Boolean). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296516

Transfere dados de um objeto gerido para um bloco de memória não gerido.

public:
 static void StructureToPtr(System::Object ^ structure, IntPtr ptr, bool fDeleteOld);
[System.Obsolete("StructureToPtr(Object, IntPtr, Boolean) may be unavailable in future releases. Instead, use StructureToPtr<T>(T, IntPtr, Boolean). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296516")]
[System.Security.SecurityCritical]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Runtime.InteropServices.ComVisible(true)]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(true)]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[System.Security.SecurityCritical]
public static void StructureToPtr(object structure, IntPtr ptr, bool fDeleteOld);
[<System.Obsolete("StructureToPtr(Object, IntPtr, Boolean) may be unavailable in future releases. Instead, use StructureToPtr<T>(T, IntPtr, Boolean). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296516")>]
[<System.Security.SecurityCritical>]
static member StructureToPtr : obj * nativeint * bool -> unit
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Runtime.InteropServices.ComVisible(true)>]
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(true)>]
static member StructureToPtr : obj * nativeint * bool -> unit
[<System.Security.SecurityCritical>]
static member StructureToPtr : obj * nativeint * bool -> unit
Public Shared Sub StructureToPtr (structure As Object, ptr As IntPtr, fDeleteOld As Boolean)

Parâmetros

structure
Object

Um objeto gerido que armazena os dados a serem organizados. Este objeto deve ser uma estrutura ou uma instância de uma classe formatada.

ptr
IntPtr

nativeint

Um ponteiro para um bloco de memória não gerido, que deve ser alocado antes de este método ser chamado.

fDeleteOld
Boolean

true chamar o DestroyStructure(IntPtr, Type) método no ptr parâmetro antes deste método copiar os dados. O bloco deve conter dados válidos. Note que passar false quando o bloco de memória já contém dados pode levar a uma fuga de memória.

Atributos

Exceções

structure é um tipo de referência que não é uma classe formatada.

-ou-

structure é uma instância de um tipo genérico (apenas no .NET Framework 4.5 e versões anteriores).

Observações

Se structure for um tipo de valor, pode ser embalado ou aberto. Se estiver em caixa, é desencaixado antes de copiar.

Uma classe formatada é um tipo de referência cujo layout é especificado pelo StructLayoutAttribute atributo, como ou LayoutKind.ExplicitLayoutKind.Sequential.

StructureToPtr copia o conteúdo de structure para o bloco de memória pré-alocado para onde o ptr parâmetro aponta. Se structure contém tipos de referência que fazem marshal para ponteiros de interface COM (interfaces, classes sem layout, e System.Object), os objetos geridos são mantidos ativos com contagens de referência. Todos os outros tipos de referência (por exemplo, strings e arrays) são marshalados para cópias. Para libertar estes objetos geridos ou não geridos, deve chamar o Marshal.DestroyStructure método antes de libertar o bloco de memória.

Se usar o StructureToPtr método para copiar uma instância diferente para o bloco de memória mais tarde, especifique true para fDeleteOld remover contagens de referências para tipos de referência na instância anterior. Caso contrário, os tipos de referência gerida e cópias não geridas são efetivamente divulgados.

O padrão geral de utilização StructureToPtr é o seguinte:

  1. Na primeira chamada ao StructureToPtr método após um bloco de memória ter sido alocado, fDeleteOld deve ser false, porque não há conteúdos para limpar.

    Importante

    Especifique true para fDeleteOld apenas se o bloco contiver dados válidos.

  2. Se copiares uma instância diferente para o bloco de memória, e o objeto contiver tipos de referência, fDeleteOld deve ser true para tipos de referência livres no conteúdo antigo.

  3. Se o objeto contiver tipos de referência, deve chamar o DestroyStructure método antes de libertar o bloco de memória.

Note

Para fixar uma estrutura existente em vez de a copiar, use o System.Runtime.InteropServices.GCHandle tipo para criar uma alavanca fixada para a estrutura. Para detalhes sobre como fixar, veja Copiar e Fixar.

Ver também

Aplica-se a

StructureToPtr<T>(T, IntPtr, Boolean)

Faz o escalão de dados de um objeto gerido de um tipo especificado para um bloco de memória não gerido.

public:
generic <typename T>
 static void StructureToPtr(T structure, IntPtr ptr, bool fDeleteOld);
[System.Security.SecurityCritical]
public static void StructureToPtr<T>(T structure, IntPtr ptr, bool fDeleteOld);
public static void StructureToPtr<T>(T structure, IntPtr ptr, bool fDeleteOld);
[<System.Security.SecurityCritical>]
static member StructureToPtr : 'T * nativeint * bool -> unit
static member StructureToPtr : 'T * nativeint * bool -> unit
Public Shared Sub StructureToPtr(Of T) (structure As T, ptr As IntPtr, fDeleteOld As Boolean)

Parâmetros de Tipo Genérico

T

O tipo do objeto gerido.

Parâmetros

structure
T

Um objeto gerido que armazena os dados a serem organizados. O objeto deve ser uma estrutura ou uma instância de uma classe formatada.

ptr
IntPtr

nativeint

Um ponteiro para um bloco de memória não gerido, que deve ser alocado antes de este método ser chamado.

fDeleteOld
Boolean

true chamar o DestroyStructure<T>(IntPtr) método no ptr parâmetro antes deste método copiar os dados. O bloco deve conter dados válidos. Note que passar false quando o bloco de memória já contém dados pode levar a uma fuga de memória.

Atributos

Exceções

structure é um tipo de referência que não é uma classe formatada.

Observações

Uma classe formatada é um tipo de referência cujo layout é especificado pelo StructLayoutAttribute atributo, como ou LayoutKind.ExplicitLayoutKind.Sequential.

StructureToPtr<T>(T, IntPtr, Boolean) copia o conteúdo de structure para o bloco de memória pré-alocado para onde o ptr parâmetro aponta. Se structure contém tipos de referência que fazem marshal para ponteiros de interface COM (interfaces, classes sem layout, e System.Object), os objetos geridos são mantidos ativos com contagens de referência. Todos os outros tipos de referência (por exemplo, strings e arrays) são marshalados para cópias. Para libertar estes objetos geridos ou não geridos, deve chamar o DestroyStructure<T>(IntPtr) método antes de libertar o bloco de memória.

Se usar o StructureToPtr<T>(T, IntPtr, Boolean) método para copiar uma instância diferente para o bloco de memória mais tarde, especifique true para fDeleteOld remover contagens de referências para tipos de referência na instância anterior. Caso contrário, os tipos de referência gerida e cópias não geridas são efetivamente divulgados.

O padrão geral de utilização StructureToPtr<T>(T, IntPtr, Boolean) é o seguinte:

  1. Na primeira chamada ao StructureToPtr método após um bloco de memória ter sido alocado, fDeleteOld deve ser false, porque não há conteúdos para limpar.

    Importante

    Especifique true para fDeleteOld apenas se o bloco contiver dados válidos.

  2. Se copiares uma instância diferente para o bloco de memória, e o objeto contiver tipos de referência, fDeleteOld deve ser true para tipos de referência livres no conteúdo antigo.

  3. Se o objeto contiver tipos de referência, deve chamar o DestroyStructure método antes de libertar o bloco de memória.

Note

Para fixar uma estrutura existente em vez de a copiar, use o System.Runtime.InteropServices.GCHandle tipo para criar uma alavanca fixada para a estrutura. Para detalhes sobre como fixar, veja Copiar e Fixar.

Ver também

Aplica-se a