Extern Linkage Type
Rodney via Digitalmars-d
digitalmars-d at puremagic.com
Mon Jun 15 14:41:49 PDT 2015
Relatively new to D, experienced in other programming languages -
especially mixed language programming.
Below is code snippets of an extern statement and resulting error
messages. finance.lib was created from implib, finance.dll was
created by Free Pascal. dfinc.d is a simple MS-DOS proof of
concept program that calls three of the functions in finance.pas.
I am running into the same problem I had calling Silverfrost
FORTRAN .dll's from D. The only linkage type that compiles
error-free is Pascal, for calling subprograms in both FORTRAN
.dll's and Pascal .dll's (obvious linkage type for Pascal, but
that produces some other interesting problems - case
insensitivity for procedure/function names and inverse parameter
order passing; using a hex editor, was able to verify Free Pascal
procedure/function names ARE case sensitive). The D program can
only call those Free Pascal subprograms whose name is entirely
upper case. Both the Silverfrost FORTRAN .dll's and the Free
Pascal .dll's are using the stdcall call model.
Can anyone please give me some insight? Possible solutions? Any
insights would be appreciated - thanks.
extern (C)
{
float CMPT_PV (ref short, ref short, ref float, ref float);
float CMPT_FV (ref short, ref short, ref float, ref float);
float NPVPROJCT (ref short, ref short, ref float[200], ref
float[200], ref float, ref float);
}
dmd dfinc.d finance.lib
OPTLINK (R) for Win32 Release 8.00.15
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
dfinc.obj(dfinc)
Error 42: Symbol Undefined _CMPT_PV
dfinc.obj(dfinc)
Error 42: Symbol Undefined _CMPT_FV
dfinc.obj(dfinc)
Error 42: Symbol Undefined _NPVPROJCT
--- errorlevel 3
***************************************
extern (C++)
{
float CMPT_PV (ref short, ref short, ref float, ref float);
float CMPT_FV (ref short, ref short, ref float, ref float);
float NPVPROJCT (ref short, ref short, ref float[200], ref
float[200], ref float, ref float);
}
dmd dfinc.d finance.lib
OPTLINK (R) for Win32 Release 8.00.15
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
dfinc.obj(dfinc)
Error 42: Symbol Undefined ?NPVPROJCT@@YAMAAF0AAY0MI at M1AAM2@Z
(float cdecl NPVPROJCT(short &,short &,float [200]&,float
[200]&,float &,float &))
dfinc.obj(dfinc)
Error 42: Symbol Undefined ?CMPT_FV@@YAMAAF0AAM1 at Z (float cdecl
CMPT_FV(short &,short &,float &,float &))
dfinc.obj(dfinc)
Error 42: Symbol Undefined ?CMPT_PV@@YAMAAF0AAM1 at Z (float cdecl
CMPT_PV(short &,short &,float &,float &))
--- errorlevel 3
***************************************
extern (D)
{
float CMPT_PV (ref short, ref short, ref float, ref float);
float CMPT_FV (ref short, ref short, ref float, ref float);
float NPVPROJCT (ref short, ref short, ref float[200], ref
float[200], ref float, ref float);
}
dmd dfinc.d finance.lib
OPTLINK (R) for Win32 Release 8.00.15
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
dfinc.obj(dfinc)
Error 42: Symbol Undefined
_D5dfinc9NPVPROJCTFKsKsKG200fKG200fKfKfZf
dfinc.obj(dfinc)
Error 42: Symbol Undefined _D5dfinc7CMPT_FVFKsKsKfKfZf
dfinc.obj(dfinc)
Error 42: Symbol Undefined _D5dfinc7CMPT_PVFKsKsKfKfZf
--- errorlevel 3
***************************************
extern (Windows)
{
float CMPT_PV (ref short, ref short, ref float, ref float);
float CMPT_FV (ref short, ref short, ref float, ref float);
float NPVPROJCT (ref short, ref short, ref float[200], ref
float[200], ref float, ref float);
}
dmd dfinc.d finance.lib
OPTLINK (R) for Win32 Release 8.00.15
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
dfinc.obj(dfinc)
Error 42: Symbol Undefined _NPVPROJCT at 24
dfinc.obj(dfinc)
Error 42: Symbol Undefined _CMPT_PV at 16
dfinc.obj(dfinc)
Error 42: Symbol Undefined _CMPT_FV at 16
--- errorlevel 3
***************************************
extern (System)
{
float CMPT_PV (ref short, ref short, ref float, ref float);
float CMPT_FV (ref short, ref short, ref float, ref float);
float NPVPROJCT (ref short, ref short, ref float[200], ref
float[200], ref float, ref float);
}
dmd dfinc.d finance.lib
OPTLINK (R) for Win32 Release 8.00.15
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
dfinc.obj(dfinc)
Error 42: Symbol Undefined _NPVPROJCT at 24
dfinc.obj(dfinc)
Error 42: Symbol Undefined _CMPT_PV at 16
dfinc.obj(dfinc)
Error 42: Symbol Undefined _CMPT_FV at 16
--- errorlevel 3
More information about the Digitalmars-d
mailing list