Marshal.StructureToPtr Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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:
Na primeira chamada ao StructureToPtr método após um bloco de memória ter sido alocado,
fDeleteOlddeve serfalse, porque não há conteúdos para limpar.Importante
Especifique
trueparafDeleteOldapenas se o bloco contiver dados válidos.Se copiares uma instância diferente para o bloco de memória, e o objeto contiver tipos de referência,
fDeleteOlddeve sertruepara tipos de referência livres no conteúdo antigo.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:
Na primeira chamada ao StructureToPtr método após um bloco de memória ter sido alocado,
fDeleteOlddeve serfalse, porque não há conteúdos para limpar.Importante
Especifique
trueparafDeleteOldapenas se o bloco contiver dados válidos.Se copiares uma instância diferente para o bloco de memória, e o objeto contiver tipos de referência,
fDeleteOlddeve sertruepara tipos de referência livres no conteúdo antigo.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.