C/Visual C - WINAPI?

 
Vista:

WINAPI?

Publicado por Oliver++ (339 intervenciones) el 06/09/2002 22:05:16

extern "C" { __declspec(dllexport)long WINAPI myfunc(long);}
long WINAPI myfunc(long a){ return a;}

que eso de WINAPI?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:WINAPI?

Publicado por Alvaro (122 intervenciones) el 07/09/2002 00:09:00
Es un define para __stdcall
eso especifica el orden en que la funcion recibe los parametros.
C ocupan __cdecl que es el orden inverso a __stdcall.
con este prefijo 'estandarizas' la funcion. así esta dll puede ser llamada desde Visual Basic por ejemplo.
Suerte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:WINAPI?

Publicado por Oliver++ (339 intervenciones) el 07/09/2002 00:38:55
pero, que tiene que ver el orden de los parametros pasados con las llamadas desde otros lenguajes?

porque no ponen el _stdcall y no complican la baina con define?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:WINAPI?

Publicado por Googol (255 intervenciones) el 07/09/2002 12:10:48
A ver, cuando tú escribes un programa, ese se compila, y el código en ensamblador espera los parámetros de una determinada forma. Por ejemplo, el código de un procedimiento podría buscar el primer parámetro en la cima de la pila, el segundo debajo de ella, etc. O al revés: el último en la cima, el penúltimo debajo... Otro modo sería que estuvieran en los registros del procesador, y cosas así.
Entonces cuando tú haces una función que vas a exportar en una DLL (o sea que tu función va a estar dentro de una DLL para que se llame desde cualquier otro programa) es necesario especificar como espera tu función los parámetros. Así si luego cualquiera escribe un programa en Visual C, en Visual Basic, o en lo que sea que utiliza esa DLL, el _compilador_ sabrá dónde diablos tiene que darle los parámetros a tu función en la DLL.

Lo del #define... eso es problema de Microsoft. Supondrá que si pone WINAPI queda claro que estás haciendolo igual que lo hacen las funciones del API de Windows, y no te preocupas por nada más. Pero en tu caso no fue así :-)

Espero que te sirva!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar