2009-09-02 6 views
2

ここで間違っていることを誰かが指摘できますか?fortran77 dllからcへの実際の値を返す#

FORTRAN 77 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 

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

    } 
} 

私は戻って、彼らがしている..after C#メインPROGにDBB DCCの値を取得したいですFORTRAN 77サブルーチンによって処理されます。

P.S.私はFortran 77を使ってINTENT(out)を使用することはできません。 事前に感謝します。

+3

を進めています。 – Shoban

+0

エラーメッセージは何ですか? – VVS

+0

THR値が同じまま...エラーのMSGでない DBB = 7 DCC = 9つの 期待値は DBB = 6.5 DCC = 7.5 –

答えて

0

さて、value-parametersを指定してFortran関数を呼び出しています。参照パラメータ(ポインタ)を使用して値を取得する必要があります。

また、2つの値を含むFortranコードからstrcutureを返すこともできます。 C#で対応する型にマーシャリングし、その結果を読み込む必要があります。

しかし私は、私がfortranについて何も知らないこと、そして私の提案の1つでもうまくいくのではないかと心配しています。

+0

を編集するためdecezeあります。しかし結果は同じです。 –

1

おかげで誰もが提案

の入力引数が値渡しとアウト引数を置くべきである... refrence で渡すので、私は「 に」*の$プラグマのAUX DON「DON」の輸出を自分のAuxilaryプラグマを変更PARM(値* 8、参照、参照) "" と、それは叫びいけないしてください、今

おかげで再び

関連する問題