Partilhar via


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

função “”: a função é criada como o código nativo: “motivo”

O compilador não pode criar function em código gerenciado, mesmo que a opção do compilador de /clr é especificada. Em vez disso, o compilador emite C4793 de aviso e uma mensagem explicativa de acompanhamento, e compila-se em function em código nativo. A mensagem de acompanhamento contém o texto de reason que explica por function não pode ser compilado a MSIL.

Este é um aviso de nível 1 quando você especifica a opção do compilador de /clr:pure .

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

Mensagem do motivo

Comentários

Os tipos de dados alinhados não têm suporte em código gerenciado

CLR deve poder atribuir quando necessário, os dados que não podem ser possíveis se os dados forem alinhados com as declarações como __m128 ou alinhar.

As funções que usam o “__ImageBase” não têm suporte em código gerenciado

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

os varargs não têm suporte pela opção do compilador de “/clr”

As funções nativos não podem chamar funções gerenciadas que têm listas de argumento variáveis varargs () porque as funções têm requisitos diferentes de layout da pilha. No entanto, se você especificar a opção de compilador de /clr:pure , as listas de argumento variáveis têm suporte porque o assembly pode conter somente funções gerenciadas. Para obter mais informações, consulte Código puro e verificável (C++/CLI).

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

Um ponteiro deve ser o mesmo tamanho como um ponteiro nativo na plataforma atual. Para obter mais informações, consulte __ptr32, __ptr64.

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

Um ponteiro deve ser o mesmo tamanho como um ponteiro nativo na plataforma atual. Para obter mais informações, consulte __ptr32, __ptr64.

Um ou mais intrinsics não têm suporte em código gerenciado

O nome intrínsecos não está disponível na mensagem é emitida. No entanto, um intrínseco que provocou essa mensagem normalmente representa uma instrução de computador de baixo nível.

O assembly nativo __asm embutida (“") não têm suporte em código gerenciado

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

Um thunk virtual da função de non-__clrcall deve ser compilado como o modo nativo

Um thunk virtual não da função de__clrcall deve usar um endereço não gerenciado.

Uma função que usa o “_setjmp” deve ser criada como o modo nativo

CLR deve ser capaz da execução de programa do controle. No entanto, a execução do programa normal de desvios da função de setjmp salvando e restaurando informações de baixo nível como registros e estado da execução.

Exemplo

O exemplo a seguir produz 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 produz C4793.

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

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