Compartilhar via


/CLR restrições

Observe as seguintes restrições sobre o uso de /clr:

  • Em um manipulador de exceção estruturada, há restrições sobre o uso de _alloca durante a compilação com /clr. Para obter mais informações, consulte _alloca.

  • O uso de verificações de erro em time de execução inválido com /clr. Para obter mais informações, consulte Verificações de erro de time de execução.

  • Quando /clr é usada para compilar um programa que usa somente a sintaxe C++ padrão, as diretrizes a seguir se aplicam ao uso de assembly embutido:

    • Código de assembly de embutido pressupõe conhecimento do nativo layout empilhado, convenções fora de função corrente, ou outras informações de baixo nível sobre o computador de chamada pode falhar se esse conhecimento é aplicado ao registro de ativação para uma função gerenciada.Funções que contém o código de assembly embutido são geradas sistema autônomo funções não gerenciadas, sistema autônomo se eles foram colocados em um módulo separado que foi compilado sem /clr.

    • Não há suporte para o código de assembly embutido em funções passar parâmetros de função construída de cópia.

  • The Funções vprintf não pode ser chamado a partir de um programa compilado com /clr.

  • The naked __declspec modifier is ignored under /clr.

  • A função do conversor definida por _set_se_translator afetará apenas dificuldades em código não gerenciado.Consulte Exceção Manipulação under /CLR para obter mais informações.

  • A comparação dos ponteiros de função não é permitida em /clr.

  • O uso de funções que não são totalmente com protótipo não é permitido em /clr.

  • Não há suporte para as opções do compilador com /clr:

  • A combinação do _STATIC_CPPLIB (definição de pré-processador/D_STATIC_CPPLIB) e o /clr ou /clr:pure Não há suporte para opção do compilador. Trata isso porque a definição faria com que seu aplicativo para vincular com estático multithread biblioteca C++ padrão, que não é suportada.Para obter mais informações, consulte o tópico /LD /MD, /MT, (biblioteca Run-Time uso).

  • /J não tem suporte**/clr:safe** ou /clr:pure.

  • In Visual C++ 2005, não há suporte para bibliotecas do ATL e MFC (compilação) modo puro**/clr:pure**). Você pode usar /clr:pure com a biblioteca C++ padrão e CRT se também de compilar com /MD ou /MDd.

  • Ao usar /Zi com /clr, há implicações de desempenho. Para obter mais informações, consulte Zi.

  • Passar um caractere largo para uma rotina de saída do .NET estrutura sem especificar /Zc:wchar_t ou sem o caractere a projeção__wchar_t fará com que a saída apareça sistema autônomo um unsigned short int. Por exemplo:

    Console::WriteLine(L' ')              // Will output 32.
    Console::WriteLine((__wchar_t)L' ')   // Will output a space.
    
  • /GS é ignorada quando a compilação de /clr, a menos que seja uma função em #pragma não gerenciado ou se a função deve ser compilada para nativo, caso em que o compilador gerará aviso C4793, o que está desativado por padrão.

  • See / ENTRADA para requisitos de assinatura de função de um aplicativo gerenciado.

  • Aplicativos compilados com /openmp e /clr só pode ser executado em um processo único de appdomain. Consulte /OpenMP (Ativar OpenMP 2.0 suporte) para obter mais informações.

  • Funções que levam a um número variável de argumentos (varargs) serão geradas sistema autônomo nativo funções.Quaisquer tipos de dados gerenciado na posição de argumento variável irão ser empacotados para tipos nativo.Observe que System.String tipos são seqüências de caractere largos, na verdade, mas eles são empacotados para seqüências de caractere de byte único. Assim, se um especificador de printf é %s (wchar_t *), ele será empacotado em uma seqüência de caracteres %s em vez disso.

  • Ao usar a macro va_arg, você pode obter resultados inesperados durante a compilação de /clr:pure. Para obter mais informações, consulte va_arg, va_end, va_start.

  • Você não deve telefonar, do código gerenciado, qualquer funciona esse exame da pilha para obter informações de parâmetros (argumentos de função); a camada de P/Invoke faz com que essas informações para ser mais abaixo na pilha.Por exemplo, não de compilar proxy/stub com /clr.

  • Funções serão compiladas para código gerenciado sempre que possível, mas nem todas as construções C++ podem ser traduzidas para código gerenciado.Isso é feito em cada função pela função.Se qualquer parte de uma função não pode ser convertido em código gerenciado, a função inteira será convertida para código nativo.Casos a seguir impede que o compilador de geração de código gerenciado.

    • Gerado pelo compilador thunks ou funções auxiliares.Thunks nativas são geradas para qualquer telefonar de função através de um ponteiro de função, inclusive chamadas de função virtual.

    • Funções que chamam setjmp ou longjmp.

    • Funções que use determinadas rotinas intrínsecas para manipular diretamente os recursos da computador.Por exemplo, o uso de __enable e __disable, _ReturnAddress e _AddressOfReturnAddress, ou intrinsics multimídia será resultado de todos os em código nativo.

    • Funções que execute o #pragma unmanaged diretiva. (Observe que o inverso, #pragma managedé oferecido suporte.)

    • Uma função que contém referências a tipos de alinhamento, ou seja, tipos declarados usando __declspec(align(...)).

  • Não é possível usar o Suporte ao compilador COM classes com /clr:pure ou /clr:safe.

Consulte também

Referência

/CLR (Common linguagem tempo de execução compilação)