Partilhar via


C4793 de aviso (nível 1 e 3) do compilador

'função' : função é compilada como código nativo: 'razão'

O compilador não é possível compilar função código gerenciado, mesmo que o /clr opção de compilador é especificada. Em vez disso, o compilador emite uma mensagem explicativa continuação e aviso de C4793 e, em seguida, compila função em código nativo. A mensagem de continuação contém o motivo o texto que explica o motivo função não pode ser compilada para MSIL.

Este é um aviso de nível 1 ao especificar o /clr:pure opção de compilador.

A tabela a seguir lista todas as mensagens de continuação possíveis.

Mensagem do motivo

Remarks

Não há suporte para tipos de dados alinhados em código gerenciado

O CLR deve ser capaz de alocar os dados conforme necessário, que talvez não seja possível se os dados alinhados com declarações como __m128 ou Alinhar.

Funções de '__ImageBase' Não há suporte para o código gerenciado

__ImageBaseé um símbolo especial de vinculador que normalmente é usado somente pelo código nativo de baixo nível para carregar uma DLL.

Não há suporte para varargs a ' / clr' opção de compilador

Funções nativas não podem chamar funções gerenciadas que tenham a lista de argumento variável (varargs) porque as funções têm requisitos de layout de pilha diferentes. No entanto, se você especificar o /clr:pure opção de compilador, o argumento variável listas têm suporte porque o assembly pode conter apenas gerenciado funções. For more information, see Código puro e verificável.

O CLR de 64 bits não suporta dados declarados com o modificador de __ptr32

Um ponteiro deve ser do mesmo tamanho que um ponteiro nativo na plataforma atual. For more information, see __ptr32, __ptr64.

O CLR de 32 bits não suporta dados declarados com o modificador de __ptr64

Um ponteiro deve ser do mesmo tamanho que um ponteiro nativo na plataforma atual. For more information, see __ptr32, __ptr64.

Intrínsecos de um ou mais não é suportado no código gerenciado

O nome do intrínsecos não está disponível no momento em que a mensagem é emitida. No entanto, um valor intrínseco que faz com que essa mensagem normalmente representa uma instrução de baixo nível de máquina.

Não há suporte para o assembly de nativo embutido ('__asm') em código gerenciado

Código de assembly embutido pode conter código nativo arbitrário, que não pode ser gerenciado.

Uma conversão de função virtual não __clrcall deve ser compilada como nativo

Um não-__clrcall thunk de função virtual deve usar um endereço não gerenciado.

Uma função usando '_setjmp' deve ser compilado como nativo

O CLR deve ser capaz de controlar a execução do programa. No entanto, o setjmp função ignora a execução do programa regular, salvando e restaurando informações de baixo nível, como registradores e o estado de execução.

Exemplo

O exemplo a seguir gera C4793.

// C4793.cpp
// compile with: /c /clr /W3 
// processor: x86
int asmfunc(void) {   // C4793, compiled as unmanaged, native code
   __asm {
      mov eax, 0
   }
}
  

O exemplo a seguir gera C4793.

// C4793_b.cpp
// compile with: /c /clr /W3
#include <setjmp.h>
jmp_buf test_buf;

void f() {
   setjmp(test_buf);   // C4793 warning
}