Can somebody please point out what I'm doing wrong here?
FORTRAN 77 dll code
*$pragma aux DON "DON" export parm(value*8,value*8)
SUBROUTINE DON(DAA,DBB,DCC)
REAL*8, DAA,DBB,DCC
DBB=DAA+1
DCC=DBB+1
RETURN
END
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace pDON
{
class Program
{
[DllImport("DON.dll",
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
public static extern void DON(
[MarshalAs(UnmanagedType.R8)] double DAA,
[MarshalAs(UnmanagedType.R8)] double DBB,
[MarshalAs(UnmanagedType.R8)] double DCC
);
static void Main(string[] args)
{
//double TIME = 100.0;
double DAA = 5.5;
double DBB = 7;
double DCC = 9;
//START( ENERIN, VAL1);
DON(DAA, DBB, DCC);
Console.Write("val1 = " + DBB);
Console.Write("val2 = " + DCC);
Debug.WriteLine("VAR = " + DBB.ToString());
Console.Write("Press any key to exit");
Console.ReadKey(false);
}
}
}
I want to get the values of DBB DCC back to C# main prog ..after they are processed thru FORTRAN 77 subroutine.
P.S. : i can not use INTENT(out) as i m using fortran 77. much thanks in advance.
Well, you are calling the Fortran-function with value-parameters. You should use reference-parameters (pointers) to get a value back from it.
Alternatively you can return a strcuture from the fortran code that contains your two values. You have to marshal it in C# to the corresponding types and read the results from it.
But I fear that I don't have any idea about fortran and if even one of my suggestions can work.
Thanks everyone for suggestions
the input argument should be passed by value and out put arguments ...pass by refrence so i changed my Auxilary pragma to ""*$pragma aux DON "DON" export parm(value*8, reference, reference)"" and it is working now
Thanks again