Compartilhar via


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

Mensagem de erro

'função': função é compilada sistema autônomo código nativo: 'razão'

O compilador não é possível compilar função em código gerenciado, mesmo que o / CLRopção do compilador é especificada.Instead, the compiler emits warning C4793 and an explanatory continuation message, and thencompiles function into native code.A mensagem de continuação contém o motivo texto que explica por que função não pode ser compilada para MSIL.

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

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

Mensagem do razão

Comentários

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

O CLR deve ser capaz de alocar dados conforme necessário, que talvez não seja possível caso sistema autônomo dados esteja de acordo com declarações sistema autônomo __m128 ou Alinhar.

Não há suporte para funções que usam '__ImageBase' em código gerenciado

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

Varargs não oferece suporte a ' / clr ' opção do compilador

Funções nativas não é possível chamar funções gerenciadas que possuem listas de argumento variável (varargs) porque as funções têm requisitos de layout empilhado diferentes.No entanto, se você especificar o /clr:pure opção do compilador argumento variável listas têm suporte como o assembly pode conter apenas funções gerenciadas. Para obter mais informações, consulte Código puro e que.

O CLR de 64 bit não oferece suporte a dados declarados com o modificador __ptr32

Um ponteiro deve estar do mesmo dimensionar de um ponteiro nativo na plataforma corrente.Para obter mais informações, consulte __ptr32, __ptr64.

O CLR de 32 bit não oferece suporte a dados declarados com o modificador __ptr64

Um ponteiro deve estar do mesmo dimensionar de um ponteiro nativo na plataforma corrente.Para obter mais informações, consulte __ptr32, __ptr64.

Um ou mais intrinsics não tem suporte no código gerenciado

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

Assembly nativo embutido ('__asm') não tem suporte no 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 __clrcall não deve ser compilado sistema autônomo nativo

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

Uma função usando '_setjmp' deve ser compilada sistema autônomo nativo

O CLR deve poder controlar a execução de programas.No entanto, a setjmp função ignora a execução do programa regular, salvando e restaurando informações de nível inferior, sistema autônomo 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
   }
}

warning C4793: 'asmfunc' : function is compiled as native code:         Inline native assembly ('__asm') is not supported in managed code

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
}

warning C4793: 'f' : function is compiled as native code:         A function using '_setjmp' must be compiled as native