Fortran Coder

查看: 18803|回复: 14
打印 上一主题 下一主题

[混编] FORTRAN与C#中数据传递方式的请教

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2016-12-13 22:29:51 | 显示全部楼层
c# 这样写
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleApplication1
{
  class Program
  {
    public struct inx
    {
      public int i;
      public double rr;
    }
    public struct outx
    {
      public int a;
      public double rr;
    }
    [DllImport("fortran_lib")] extern static int myfortran(ref inx A, ref outx B);
    static void Main(string[] args) 
    {
      inx X;
      outx Y;
      X.i = 3;
      X.rr= 6.0;
      Y.a = 1;    
      Y.rr=3.0;
      int c = myfortran( ref X , ref Y );
      Console.WriteLine("c# return:");
      Console.WriteLine(Y.rr);
      Console.Read();
    }
  }
}

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-12-25 17:57:07 | 显示全部楼层
Y.a ="A"将出现无法将类型“string”隐式转换为“int”的错误
这是 C# 的问题,我无法解决。猜想是因为 Y.a 是 int 类型,不能直接赋予 "A" 的值(因为它是 string 类型)

int c=myfortran(ref X, ref Y);
这里的 c 是一个int变量,赋予它 myfortran 的返回的值。
8楼的代码里并没有明确返回值是多少,如果你想要返回值,可以在 fortran 代码里操作 my
比如 my = 30
返回之后,c 就会等于 30

X 修饰为 ref,是因为结构体一般都比较大,用 ref 传递比较节约空间。并且可以传回。
(传值是无法传回的)
我也不知道你看的那本书为什么说,结构是值类型。感觉很莫名其妙。(当然我对C#并不了解)

整数,浮点数,字符串,数组,都是可以相互传递或返回的。
之所以放到一个结构体里,是因为简单,易于扩展。(比如增加新的成员变量)

本坛的混编分类里有不少帖子,应该也有不少传递数组和字符串的例子,多看看。就学会了。
虽然不一定是 C# 的,但是有相通之处。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-18 18:10

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表