[Lazarus-es] Problema con LoadLibrary

José Mejuto joshyfun en gmail.com
Mie Ene 21 11:19:55 CET 2015


El 20/01/2015 a las 20:52, Maxi escribió:
> no está decorado sino explicito por el programador en la declaracion
> del nombre a exportar
>
> ): Longint; stdcall; far; external 'swedll32.dll' name '_swe_calc en 24';
>
> Si no se le aplica el name, exporta como se define la funcion.

Hola,

Estás confundiendo importar con exportar. El "name" de pascal es para 
*importar* una función con un nombre diferente (el que figura en la DLL) 
al que damos en el código pascal.

Lo que te decía es que el autor de la DLL (swedll32.dll) ha usado el 
sistema no explícito de exportación de funciones de C y en este caso el 
linker exporta los nombres de función decorados al ser "stdcall", si 
fuera un "cdecl" no los decoraría.

Si te fijas el código C original no importa con decorador:

DllImport int32 FAR PASCAL swe_calc(.....)

Ya que C decide que si es "FAR PASCAL" la función ha de estar decorada 
(por defecto).

Extraido del MSDN:

-------------------
dllexport of a function exposes the function with its decorated name. 
For C++ functions, this includes name mangling. For C functions or 
functions that are declared as extern "C", this includes 
platform-specific decoration that's based on the calling convention. If 
you don't want name decoration, use a .def file (EXPORTS keyword).
-------------------

-- 





More information about the Lazarus-es mailing list