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