Partilhar via


Buffers de dimensionar fixo (guia de programação translation from VPE for Csharp)

Translation from VPE for Csharp, você pode usar o fixo demonstrativo para criar um buffer com uma matriz de dimensionar fixo em uma estrutura de dados.Isso é útil quando você estiver trabalhando com o código existente, sistema autônomo o código escrito em outras linguagens, DLLs preexistentes ou COM projetos.Matriz fixed pode levar nenhum atributo ou modificadores que têm permissão para membros de struct regular.A única restrição é que o tipo de matriz deve ser bool, byte, char, short, int, long, sbyte, ushort, uint, ulong, float, ou double.

private fixed char name[30];

Comentários

Em versões anteriores do translation from VPE for Csharp, declarar uma estrutura de dimensionar fixo de estilo C++ era difícil porque uma struct de translation from VPE for Csharp contém uma matriz não contém os elementos da matriz, mas em vez disso, contém uma referência aos elementos.

Translation from VPE for Csharp 2.0 incluiu a capacidade de incorporar uma matriz de dimensionar fixo em um struct quando ele é usado em um não seguro bloco de código.

For example, antes de translation from VPE for Csharp 2.0, a seguinte struct seria 8 bytes de dimensionar no qual o pathName matriz é uma referência para o array alocada em heap:

    public struct MyArray
    {
        public char[] pathName;
        private int reserved;
    }

Em translation from VPE for Csharp 2.0, um struct pode ser declarado com uma matriz incorporada:

public struct MyArray // This code must appear in an unsafe block
{
    public fixed char pathName[128];
}

Nesta estrutura, a pathName matriz é do dimensionar fixo e o local e, portanto, pode ser usado com Outros código não seguro.

O dimensionar do elemento de 128 char matriz é 256 bytes. dimensionar fixo char buffers sempre têm dois bytes por caractere, independentemente da codificação.Isso é verdadeiro mesmo quando char buffers são empacotados para métodos de API ou estruturas com CharSet = CharSet.Auto ou CharSet = CharSet.Ansi. Para obter mais informações, consulte CharSet.

Outra matriz de dimensionar fixo comum é de bool matriz.Os elementos em um bool matriz são sempre um byte de dimensionar. bool matrizes não são adequados para a criação de matrizes de bit ou buffers.

Observação:

Com exceção de memória criada usando stackalloc, o compilador translation from VPE for Csharp e o common linguagem tempo de execução (CLR) não executam qualquer verificações de saturação de buffer de segurança.sistema autônomo com todo o código não seguro, tome cuidado.

Buffers não seguros diferem de arrays regulares das seguintes maneiras:

  • Você só pode usar buffers não seguros em um contexto sem segurança.

  • Buffers não seguros sejam sempre vetores ou matrizes unidimensionais.

  • A declaração de matriz deve incluir uma contagem, sistema autônomo char id[8]. Não é possível usar char id[] em vez disso.

  • Buffers não seguros só podem ser campos de instância de estruturas em um contexto sem segurança.

Consulte também

Conceitos

Guia de Programação C#

Referência

Não seguro código e ponteiros (guia de programação C#)

Instrução fixa (referência C#)

Interoperabilidade (guia de programação C#)