C#调用FORTRAN,windows模式下,想传一个文件名给FORTRAN,让FORTRAN处理该文件。初学求高手指点 20
FORTRAN代码:subroutineArr_Sub(name)!DEC$ATTRIBUTESDLLEXPORT::Arr_Sub!DEC$ATTRIBUTESALIA...
FORTRAN代码:
subroutine Arr_Sub (name)
!DEC$ ATTRIBUTES DLLEXPORT :: Arr_Sub
!DEC$ ATTRIBUTES ALIAS:'Arr_Sub'::Arr_Sub
character(len=20)::name
open(9,file="test.dat")
write(9,*)name
close(9)
end subroutine
C#代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
string name = "一个文件";
[DllImport(@"E:\c#\TRY\TestDll\TestDll\Debug\TestDll.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern void Arr_Sub(string name );
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Arr_Sub(name);
}
运行正常,但是生成的test.txt里面写的除了“一个文件之外还有乱码,
如果把write(9,*)name改成write(9,"(A8)")name将可以只输出”一个文件“四字。
如果把write(9,*)name改为write(9,*)len_trim(name)则输出20,即FORTRAN里name开始定义时的长度。
也就是C#传过来的字符串除了我定义的内容外还有别的FORTRAN无法识别的内容。
请问如何才能让FORTRAN只正确接收到我穿过去的字符??
另外窗口模式下C#怎样添加一个输入框让我们再点击BUTTON前先输出我要的文件名,然后在点击后把我输入的文件名赋值给将要传给FORTRAN的字符串呢??
谢谢! 展开
subroutine Arr_Sub (name)
!DEC$ ATTRIBUTES DLLEXPORT :: Arr_Sub
!DEC$ ATTRIBUTES ALIAS:'Arr_Sub'::Arr_Sub
character(len=20)::name
open(9,file="test.dat")
write(9,*)name
close(9)
end subroutine
C#代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
string name = "一个文件";
[DllImport(@"E:\c#\TRY\TestDll\TestDll\Debug\TestDll.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern void Arr_Sub(string name );
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Arr_Sub(name);
}
运行正常,但是生成的test.txt里面写的除了“一个文件之外还有乱码,
如果把write(9,*)name改成write(9,"(A8)")name将可以只输出”一个文件“四字。
如果把write(9,*)name改为write(9,*)len_trim(name)则输出20,即FORTRAN里name开始定义时的长度。
也就是C#传过来的字符串除了我定义的内容外还有别的FORTRAN无法识别的内容。
请问如何才能让FORTRAN只正确接收到我穿过去的字符??
另外窗口模式下C#怎样添加一个输入框让我们再点击BUTTON前先输出我要的文件名,然后在点击后把我输入的文件名赋值给将要传给FORTRAN的字符串呢??
谢谢! 展开
1个回答
展开全部
试祥念碧试高正看
subroutine Arr_Sub (name)
!DEC$ ATTRIBUTES DLLEXPORT :: Arr_Sub
!DEC$ ATTRIBUTES ALIAS:'Arr_Sub'谨举::Arr_Sub
character(len=*)::name
open(9,file="test.dat")
write(9,*)name
close(9)
end subroutine
C#
public static extern void Arr_Sub(string name , 8 );
subroutine Arr_Sub (name)
!DEC$ ATTRIBUTES DLLEXPORT :: Arr_Sub
!DEC$ ATTRIBUTES ALIAS:'Arr_Sub'谨举::Arr_Sub
character(len=*)::name
open(9,file="test.dat")
write(9,*)name
close(9)
end subroutine
C#
public static extern void Arr_Sub(string name , 8 );
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询