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