Fortran DLL and D

Michael pr at m1xa.com
Tue Mar 13 15:15:01 PDT 2012


Hi everyone)

dmd 2.058
os: win 7 64 bit
fortran compilers: gfortran, ftn95

I have a fortran code that compiled into dll:

SUBROUTINE fsu (i)
     real :: x
     integer :: i
     x = 0.025
     print *, 'The answer is x = ', x , i
END SUBROUTINE fsu

and simple D code

import std.stdio;
import core.runtime;
import std.c.windows.windows;
import core.memory;

alias void function(int) MyHandler;

void main()
{
     GC.disable;
     FARPROC fp;
     HMODULE lib = cast(HMODULE)Runtime.loadLibrary("testf.dll");
     MyHandler mh;

     if (lib is null)
     {
         writeln("Lib!");
         return;
     }

     fp = GetProcAddress(lib, "FSU");

     if (fp is null)
     {
             writeln("Proc!");
             writeln(GetLastError());
             return;
     }
     mh = cast(MyHandler) fp;
     (*mh)(1);
     Runtime.unloadLibrary(lib);
}

and its output

The answer is x =     2.500000E-02  1407551829

It's should be an 1 value instead 1407551829.

I think, trouble in param passing.
How it can be fixed? Or where to look?

Thanks)



More information about the Digitalmars-d mailing list