Extern Linkage Type

FreeSlave via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 18 01:07:25 PDT 2015


On Wednesday, 17 June 2015 at 20:33:04 UTC, Rodney wrote:
> On Tuesday, 16 June 2015 at 07:47:21 UTC, Kagamin wrote:
>> implib works for C calling convention only.
>
> Thank you for your reply.
>
> So if I am understanding correctly (feel free to admit my 
> ignorance):
>
> 1. implib is required to generate a dmd compatible import 
> library from an .dll
>
> 2. implib only works for C calling convention only
>
> Therefore, D can only call C and D compatible .dll's?
>
> Obviously I am being dumb about something, because learning and 
> playing around with D I have written several windows programs 
> (XP and 7) that call Silverfrost FORTRAN .dll's (please see 
> http://rrroberts.50webs.com/cobindex.htm) using extern (Pascal) 
> {...}.  The FORTRAN .dll's were produced by the Silverfrost 
> SLINKER, then produced an .lib file from that .dll using DMD's 
> implib.  And I am now doing the same thing with Free Pascal.
>
> And before anyone says COBOL and FORTRAN are dead, COBOL is 
> still widely used in banking back-end applications, and FORTRAN 
> is used in engineering applications.
>
> Again thanks for your reply.

I believe you can declare cdecl wrappers on free pascal or 
fortran side, so they will have C calling convention and no 
mangling. For example:

procedure procedure_name(arg : ArgType); cdecl;
*forward arguments to original procedure*

function function_name(arg : ArgType): ReturnedType; cdecl;
*forward arguments to original function*

And then on D side:
extern(C) void procedure_name(ArgType arg);
extern(C) ReturnedType function_na,e(ArgType arg);




More information about the Digitalmars-d mailing list