c# cdeCl
y c __ stcall
para la coexistencia en p/invoke
En P/Invoke interoperabilidad entre C# y C, a menudo es el caso que las funciones de C# usan la Convención CDECL
llamadas, mientras que sus funciones C correspondientes usan la firma __ stdcall
. Este desajuste proviene de la selección de convenciones de llamadas que históricamente ha continuado hasta el día de hoy.
__ stdcall
: la función de llamadas de Windows limpia
__ stdcall
hereda de la convención de llamadas PASCAL de 16 bits y es la convención de llamadas predeterminada para las funciones de la API de Windows y com. Especifica que la Callee (la función que se llama) limpia la pila después de la ejecución, lo que la hace más compacta en entornos con recursos limitados. Sin embargo, si el número de parámetros esperados por la persona que llama y el Callee no coincide, esta ventaja plantea el riesgo de desequilibrio de la pila.
__ cdecl
: limpieza de llamadas de la función de parámetro mutable
__ cdecl
es una convención de llamada estándar en C para funciones con un número variable de parámetros, como printf ()
y scanf ()
. Esta convención pone la responsabilidad de la limpieza de la pila en la persona que llama, porque la persona que llama sabe la cantidad de parámetros que se pasa. Olvidé especificar callConvention.cdecl
en la declaración [dllImport]
en C# es una trampa común.
__ thisCall
: ocultar este puntero del método C
__ thisCall
se refiere específicamente a C, que maneja el paso Hidden this
Punters en el método de instancia de la clase. Es similar a __ CDECL
, pero el controlador .NET P/Invoke Marshalling no lo admite y, por lo tanto, no es adecuado para el código Pinvoke C.
Resumir
La coexistencia de cdeCl llamar
en C# y el __ stdcall
en C es el resultado de estas convenciones de llamadas históricas y cada requisitos específicos del lenguaje. La comprensión adecuada de estas convenciones, así como las propiedades de EntryPoint
y exactos
de son fundamentales para garantizar la funcionalidad P/invocación correcta y evitar posibles problemas como el desequilibrio de la pila.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3