![]() |
stdcall? overload?
Hola estoy intentando hacer una dll en delphi pero lei por alli q usan estas 2 palabras(stdcall; overload;) al final de la funcion. Ademas que conflictos puede haber si declaro la variable C como string y pq char o pchar
Gracias |
¿Y cuál es la pregunta? :D
Cuando el código compilado en Delphi, llama una función o procedimiento, en ese instante se va agregando a la pila de ese hilo de ejecución: El puntero de la siguiente instrucción después de la llamada a la función y el puntero a cada uno de los parámetros de izquierda a derecha exceptuando los tres primeros parámetros, que por optimización se guardan en registros, y la función es la encargada de quitarlos de la pila al retornar. Pero si necesitamos llamar a una función que no respete esquema, tenemos cinco convenios estándares de llamadas: register Convención por defecto de Delphi descrita anteriormente. pascal Original de los primeros compiladores, utiliza parámetros de izquierda a derecha y la rutina es la encargada de quitarlos. cdecl Parámetros de derecha a izquierda y es quien llama que tiene que quitar los parámetros de la pila. (Tipo ANSI C) stdcall Es el standard de windows, los parámetros se agregan de Izquierda a Derecha y la rutina los quita. safecall Los parámetros se agregan de Izquierda a Derecha y la rutina los quita. Saludos! |
Me olvidaba: La directiva overload le indica al compilador que ese procedimiento puede ser sobrecargado, en pocas palabras: puede haber dos procedimientos homónimos con distinto juego de parámetros y es el compilador el que decide cual llamar según los parámetros que se especifiquen en la llamada.
Saludos! |
Hola, gracias por responder.
-Una cosa, y como debe saber cual de estos standares usar??? -A que te refieres con parametros de derecha izq, disculpa mi ignorancia, recien estoy aprendiendo delphi. -Y cuales son los conflictos entre los tipos de datos, Ej. y hago una DLL en VisualBasic, funcionara en delphi?? Gracias nuevamente. |
Cita:
Cita:
Hará lo siguiente (esta algo simplificado para que se entienda): en cambio, si laamamos a la función: Que tiene la directiva stdcall, la ejecución será (otra vez simplificando):
Cita:
Por ejemplo si le quieres pasar un entero a VB6, tienes que tener en cuenta que los enteros en VB6 son de 16 bits, por lo tanto el equivalente a un Smallint de Delphi. Saludos! |
La franja horaria es GMT +2. Ahora son las 08:02:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi