[fpc-pascal] How to call lib routines with cdecl calling convention with win32 app?

Coco Pascal coco.pascal at xs4all.nl
Sun May 31 15:28:46 CEST 2009


Marco van de Voort schreef:
> In our previous episode, Coco Pascal said:
>   
>> I have a library with udf routines using the cdecl calling convention, 
>> required by Firebird. This seems to work well on win32.
>>     
>
> How exactly?
>   
?

function Y_Odd(const AValue: Int64): LongInt; cdecl; export;
begin
  if Odd(AValue) then
    Result := -1
  else
    Result := 0;
end; {Y_Odd}

exports

Y_Odd;

This works fine with Firebird. If I declare the stdcall calling 
convention Firebird can't find its entrypoint.

>   
>> However when I test these routines with a fpc win32 app declaring 
>> external functions with the cdecl or stdcall calling convention gives me 
>> a 'entrypoint not found' error. I assume cdecl is obligatory, but can I 
>> implement that?
>>     
>
> Maybe it is a matter of an underscore prefix. Write the declaration full
> (cdecl external libname name '_symbol';
>
> and experiment with leaving the underscore there or not.
>
> It might also be the need to declare a libname. Windows and OS X afaik have separate
> linker namespaces for external libs, so you need to declare the name of the
> module they are in.
>   
   function Y_Odd(const AValue: Int64): LongInt; cdecl; external LibName 
name 'libyfbudf.dll';
gives me an  Identifier not found "LibName" error.

   function Y_Odd(const AValue: Int64): LongInt; cdecl; external 
'_libyfbudf.dll';
gives me a File not found _libyfbudf.dll.






More information about the fpc-pascal mailing list