将实际值从fortran77 dll返回到c# [英] returning real values from fortran77 dll to c#

查看:138
本文介绍了将实际值从fortran77 dll返回到c#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以指出我在这里做错什么?



FORTRAN 77 dll代码

  * $ pragma aux DONDONexport parm(value * 8,value * 8)


SUBROUTINE DON DAA,DBB,DCC)
REAL * 8,DAA,DBB,DCC
DBB = DAA + 1
DCC = DBB + 1
返回
END






C#代码

  using System; 

使用System.Collections.Generic;

使用System.Linq;

使用System.Text;

使用System.Runtime.InteropServices;

使用System.Diagnostics;

命名空间pDON
{
类程序
{

[DllImport(DON.dll,
CharSet = CharSet 。
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(按任意键退出);
Console.ReadKey(false);
}

}
}

我想通过FORTRAN 77子程序处理后,将DBB DCC的值恢复到C#主程序。



PS :我不能使用INTENT(out)作为im使用fortran 77.
非常感谢提前。

解决方案

谢谢每个人的建议



输入参数应该通过value和out put参数传递...通过refrence
,所以我将我的辅助编译指示更改为
* $ pragma aux DONDONexport parm(value * 8,reference,reference)
,它正在工作



再次感谢


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.

解决方案

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

这篇关于将实际值从fortran77 dll返回到c#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆