Convenciones de llamada

Completando un poco lo comentado en la entrada anterior, me ha pedido un compañero a traves de un correo, que ampliara la información sobre los convenios de llamada en procedimientos y funciones. No entendia muy bien que era eso de «stdcall» o «cdecl»

Si seguisteis los pasos que dimos, al llegar al punto de ir detallando las funciones que exportaba la librería en Velneo, nos encontrabamos con dos opciones a elegir, que estaban directamente relacionadas con la directiva que habia sido aplicada a cada una de las funciones de la dll. Segun la directiva aplicada en la función, se determinará el orden en que se pasan los parámetros de los procedimientos y funciones, el modo en el que serán pasados (en algun tipo de convención como la aplicada por la directiva register los parametros son pasados a los registros de la CPU) y el responsable de la eliminación de los mismos en la pila. En nuestro caso, aplicado al ejemplo actual cambio solo esto último.

Lo mejor es verlo en una tabla para las dos directivas que podemos aplicar:

DIRECTIVA ORDEN DE LOS PARAMETROS RESPONSBLE LIMPIEZA MEMORIA PARAMETROS A REGISTROS
cdecl De Derecha a Izquierda Quien realiza la llamada. No
stdcall De Derecha a Izquierda Rutina No

Así que es muy importante que tanto la librería como la importación de la misma desde Velneo marquen correctamente el convenio de llamada utilizado en cada una de las funciones.

En una buena parte de las directivas (exceptuando cdecl) son los procedimientos y funciones, los que eliminan los parametros de pila al devolver el control. En la convención cdecl es al contrario. El responsable de la invocación del procedimiento o de la función sera también responsable de eliminar los parametros de la pila en el momento en el que devuelve esa llamada. Habitualmente el convenio cdecl es utilizado en librerias que se han creado desde C o C++.

Otro comentario que olvidaba… 🙂

Respecto al tipo LPSTR, como retorno de la función, comentar que es un puntero a cadena de caracteres (pchar), equivalente al tipo PAnsiChar de Object Pascal. Lo mejor en estos casos, si se tiene duda es consultar (buscar) la traducción que se ha hecho en Delphi de los mismos (se importaron de las cabeceras originales de C propia del Api de Windows). En las primeras páginas del «Nucleo del Api de Win32» de la colección de Tomos de Delphi, viene indicada una lista de equivalencia de tipos entre Windows y Object Pascal que puede orientaros. Este libro podrá ser descargado gratuitamente desde el Rinconcito de Delphi gracias a la colaboración de DanySoft en próximas ediciones del Boletín de Delphi.

Un saludo y buen fin de semana para todos.

Los comentarios están cerrados.

Blog de WordPress.com.

Subir ↑

Marina Casado

Escritora y Doctora en Literatura Española. Periodista cultural. Madrid, España

Sigo aqui

Mi rincon del cuadrilatero

Recetas y consejos nutricionales

Indicadas para personas con diabetes, recomendadas para todos.

¡Buen camino!

ANÉCDOTAS Y REFLEXIONES SOBRE UN VIAJE A SANTIAGO…

https://lfgonzalez.visiblogs.com/

Algunas reflexiones y comentarios sobre Delphi

It's All About Code!

A blog about Delphi, C++ Builder and related technologies...

The Podcast at Delphi.org

The Podcast about the Delphi programming language, tools, news and community.

Blog de Carlos G

Algunas reflexiones y comentarios sobre Delphi

The Road to Delphi

Delphi - Free Pascal - Oxygene

La web de Seoane

Algunas reflexiones y comentarios sobre Delphi

El blog de cadetill

Cosas de programación....... y de la vida

Delphi-losophy

A Lover of Delphic Wisdom

Delphi en Movimiento

Algunas reflexiones y comentarios sobre Delphi

marcocantu.blog

Algunas reflexiones y comentarios sobre Delphi

Press F9

Algunas reflexiones y comentarios sobre Delphi

El blog de jachguate

Un blog sobre tecnología y la vida en general

A %d blogueros les gusta esto: