Advertencia del compilador (niveles 1 y 3) C4793

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

'función': la función está compilada como código nativo: 'razón'

El compilador no puede compilar function en código administrado, aunque se especifica la opción del compilador /clr . En su lugar, el compilador emite la advertencia C4793 y un mensaje explicativo a continuación y, a continuación compila function en código nativo. El mensaje de continuación contiene el texto de reason que explica por qué function no se puede compilar en MSIL.

Se trata de una advertencia de nivel 1 cuando se especifica la opción del compilador /clr:pure.

En la siguiente tabla se muestran todos los mensajes que pueden incluirse a continuación del error.

Mensaje con la razónComentarios
Los tipos de datos alineados no se admiten en código administradoCLR debe poder asignar datos en función de las necesidades, lo cual no es posible si los datos están alineados con declaraciones del tipo __m128 o align.
No se admiten funciones que utilizan '__ImageBase' en el código administrado__ImageBase es un símbolo especial del vinculador utilizado únicamente por el código nativo de bajo nivel para cargar una DLL.
La opción del compilador '/clr' no admite varargsLas funciones nativas no pueden llamar a funciones administradas que tienen listas de argumentos variables (varargs) porque las funciones presentan distintos requisitos de diseño de pila. No obstante, si especifica la opción del compilador /clr:pure, sí que se admiten listas de argumentos variables porque el ensamblado sólo puede contener funciones administradas. Para obtener más información, vea Código puro y comprobable.
El CLR de 64 bits no admite datos declarados con el modificador __ptr32Un puntero debe tener el mismo tamaño que un puntero nativo en la plataforma actual. Para obtener más información, vea __ptr32, __ptr64.
El CLR de 32 bits no admite datos declarados con el modificador __ptr64Un puntero debe tener el mismo tamaño que un puntero nativo en la plataforma actual. Para obtener más información, vea __ptr32, __ptr64.
No se admiten una o varias instrucciones intrínsecas en el código administradoEl nombre de la instrucción intrínseca no está disponible en el momento en que se emite el mensaje. Sin embargo, una instrucción intrínseca que origina este mensaje suele representar una instrucción máquina de bajo nivel.
No se admite el ensamblado nativo insertado ('__asm') en el código administradoEl código de ensamblado insertado puede incluir código nativo arbitrario, que no puede administrarse.
El código thunk de una función virtual distinta de __clrcall debe compilarse como código nativoEl código thunk de una función virtual distinta de __clrcall debe utilizar una dirección no administrada.
Una función que utilice '_setjmp' debe compilarse como nativaEl CLR debe ser capaz de controlar la ejecución de programas. Sin embargo, la función setjmp omite la ejecución normal de programas ya que guarda y restaura información de bajo nivel, como registros y el estado de ejecución.

El ejemplo siguiente genera el error C4793.

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

advertencia C4793: 'asmfunc': la función está compilada como código nativo:
No se admite el ensamblado nativo insertado ('__asm') en el código administrado

El ejemplo siguiente genera el error C4793.

// C4793_b.cpp  
// compile with: /c /clr /W3  
#include <setjmp.h>  
jmp_buf test_buf;  
  
void f() {  
   setjmp(test_buf);   // C4793 warning  
}  

advertencia C4793: 'f': la función está compilada como código nativo:
Una función que utilice '_setjmp' debe compilarse como nativa

Mostrar: