2009-09-02 10 views
2

Quelqu'un peut-il s'il vous plaît souligner ce que je fais mal ici?retourner les valeurs réelles de fortran77 dll à C#

FORTRAN 77 Code dll

*$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 

code C#

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); 
     } 

    } 
} 

Je veux obtenir les valeurs de DBB DCC retour à C# principale prog ..après ils sont traité par le sous-programme FORTRAN 77.

P.S. : je ne peux pas utiliser INTENT (out) comme je m fortran 77. merci beaucoup d'avance.

+3

S'il vous plaît ne pas crier. – Shoban

+0

Alors .. quel est le message d'erreur? – VVS

+0

Thr est pas msg d'erreur ... la valeur reste la même DBB = 7 DCC = 9 valeurs attendues sont DBB = 6,5 DCC = 7.5 –

Répondre

0

Eh bien, vous appelez la fonction Fortran avec des paramètres de valeur. Vous devriez utiliser reference-parameters (pointeurs) pour en récupérer une valeur.

Vous pouvez également renvoyer une strcuture du code fortran contenant vos deux valeurs. Vous devez le rassembler en C# aux types correspondants et en lire les résultats.

Mais je crains que je n'ai aucune idée de fortran et si même une de mes suggestions peut fonctionner.

+0

j'ai essayé le type de référence pour les paramètres de sortie. .mais les résultats sont les mêmes. –

1

Merci à tous pour les suggestions

l'argument d'entrée doit être adoptée par la valeur et eteint arguments ... passer par refrence donc je changé mon Auxilary pragma à "" * pragma $ aux DON "DON" export parm (valeur * 8, référence, référence) "" et il travaille actuellement

Merci encore

Questions connexes