Fortran Coder

查看: 4712|回复: 1
打印 上一主题 下一主题

C#向FORTRAN中传递数据出错

[复制链接]

58

帖子

9

主题

0

精华

熟手

F 币
256 元
贡献
163 点
跳转到指定楼层
楼主
发表于 2016-12-13 16:21:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大侠好,小弟又遇到问题还请抽空帮忙指点!
我有一个成熟的FORTRAN小程序,输入量几十个,输出量几百个。程序的结构为主程序,若干子程序和用MODULE定义的全局变量(程序的输入量,这些变量在主程序和各个子程序中都有用到)。现想用C#做一个界面,通过FORTRAN输出DLL(初想用显示链接),把用MODULE定义的全局变量(输入量)从C#界面中输入。
下边是我做的一个简单的调试例子生成FORTRAN的DLL时出现了以下问题。
FORTRAN代码如下:
[Fortran] 纯文本查看 复制代码
MODULE EXAMP
use , Intrinsic :: ISO_C_Binding
implicit none
  TYPE EXAMP_A
  INTEGER(4), value :: N
  REAL(8), value :: M
  !DEC$ ATTRIBUTES DLLEXPORT :: TYPE EXAMP_A
  END TYPE EXAMP_A
END MODULE EXAMP
Integer Function Add(X,B)  Bind(C,Name="Add")!
!DEC$ ATTRIBUTES DLLEXPORT :: Add
use , Intrinsic :: ISO_C_Binding
implicit none
integer , value :: X , B
Add = M*N(X + b)
end Function Add

C#代码如下:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        [DllImport(@"J:\ConsoleApplication1\Dll1\Debug\Dll1.dll", EntryPoint = "Add")]
//DLL文件地址
        extern static int Add(int A,int B);
        extern static struct  EXAMP_A
        {int N
        double M};
        static void Main(string[] args)
        {
            N=2   //想通过C#的结构体向FORTRAN的TYPE类型赋值
            M=0.5    //想通过C#的结构体向FORTRAN的TYPE类型赋值
            int c = Add(1,2);
            Console.WriteLine(c);
            Console.Read();
        }
    }
}

单独.png (7.82 KB, 下载次数: 115)

单独.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2016-12-13 19:10:19 | 只看该作者

回帖奖励 +20

你先学会在 C# 里实现:
1. 在一个 cs 文件里定义 struct
2. 在另一个 cs 文件里对其赋值。

然后你再学混编吧。走路还没学会,就开始跑了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 21:16

Powered by Tencent X3.4

© 2013-2024 Tencent

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