回 帖 发 新 帖 刷新版面

主题:[讨论]C#调用Fortran写的DLL

用的是绑在VS.net上的Intel Fortran编译器
Fortran的代码
 Subroutine  xyADD(x,y)
      IMPLICIT NONE 
      !DEC$ ATTRIBUTES DLLEXPORT::xyADD
      !DEC$ ATTRIBUTES ALIAS:'xyADD'::xyADD   
      integer x,y                               
      integer sum
      sum=x+y
      return sum
      End Subroutine

C#的代码
public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("fdll1.dll",CallingConvention=CallingConvention.StdCall)]            
        public extern static int xyADD(ref int x,ref int y);

        public Form1()
        {
            InitializeComponent();
        } 
        private void button1_Click(object sender, EventArgs e)
        {
            int x, y, result;
            x = int.Parse(textBox1.Text);
            y = int.Parse(textBox2.Text);
            result = xyADD(ref x, ref y);
            textBox3.Text = result.ToString();
        }
    }
我想知道在Fortran里x、y和sum要怎么定义,用值传递还是地址传递?现在代码可以运行但结果不对,Fortran不会 是现学的,希望大家能给我指点指点

回复列表 (共7个回复)

沙发


[em18]怎么没有人回复呢?~~~

板凳

Fortran代码改改:
      Function  xyADD(x,y)
        IMPLICIT NONE 
        !DEC$ ATTRIBUTES DLLEXPORT::xyADD
        !DEC$ ATTRIBUTES ALIAS:'xyADD'::xyADD   
        integer x,y                               
        integer xyADD
        xyADD=x+y
      End Function

3 楼

Subroutine相当于void函数,是没有返回值的,需要返回值就必须定义为Function:)

4 楼


我还以为做DLL只能用例程subroutine,不可以用function呢
我试试啊 先谢谢~~

5 楼


试了 一下 可以了 谢谢你啊~~~

6 楼

呵呵,不客气。

7 楼

,结果,我一按按钮,没有弹出消息框提示DLL中函数寻找成功,而是出来一个这样的东西(见附件)

我来回复

您尚未登录,请登录后再回复。点此登录或注册