我已经失去信心了

agamenon 2004-04-21 12:02:21

为了完成老师的作业,这段时间我一直在试着用vc调用fortran的程序,因为我们这个学科很多现成的程序都是用fortran编好的。我先是用system调用exe文件,那很简单。后来试着用visual fortran编成动态链接库调用,我查了很多书,从对动态链接库一窍不通到略有所知,但程序一直没有调用成功,上次在vckbase里载到一个现成的程序,这个原版的程序拿回来编译运行都成功,但调用数组时返回的值不对:DO i=1,3
DO j=1,3
arr(i,j)=10.1*i+j
END DO
END DO
结果是33.3
返回单个数时不论你改成多少都是0;
我已经没办法了,谁能帮帮我。
...全文
120 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_Qiao 2004-09-29
  • 打赏
  • 举报
回复
想起一件事情; FORTRAN中的子程序调用时, 参数是引用调用, 而C缺省是值调用. 比如用FORTRAN调用时, 子程序中改变参数的值, 主程序中也作相应的改变, 因为子程序和主程序中的a,b,c存放在同一地址下面,具体如下;

program main
a = 0
b = 0
c = 0
call subp( a, b, c )
c 子程序调用结束后,a, b, c的值已经分别是1,2,3了
end

subroutine subp( a, b, c )
a = 1
b = 2
c = 3
end

而在C程序中却完全不同, 函数中改变参数的值不会影响函数外部的变量.因为C程序中, 不同函数体内的变量都有各自不同的地址存放, 具体如下;

int main()
{
double a = 0, b=0, c=0 ;
func( a, b, c ) ;
// 函数调用结束后, a, b, c的值还是0, 0, 0
return 0 ;
}

void func( double a, double b, double c )
{
a = 1;
b = 2;
c = 3;
}

你的问题是否跟这个有关系?
kugou123 2004-09-28
  • 打赏
  • 举报
回复
太平洋,厉害。呵呵。上次回帖还是两个三角,现在已经成星了。嘿嘿~~
syy64 2004-09-28
  • 打赏
  • 举报
回复
有人吗?快结帖呀!
agamenon 2004-04-23
  • 打赏
  • 举报
回复
syy64(太平洋):
我是这样载入dll的,对单参数是引用啊:(&a)
HINSTANCE hIns;
hIns = LoadLibraryEx("EXAM.dll",NULL,DONT_RESOLVE_DLL_REFERENCES);
typedef int (*MYPROC)(int &a, float b[3][3]);
MYPROC fun= (MYPROC)GetProcAddress(hIns,"_ARRAYTEST@8");
float arr[3][3];
int a = 10;
fun(a,arr);

syy64 2004-04-23
  • 打赏
  • 举报
回复
vc++调fortran我也没用过,你只能多试了。
agamenon 2004-04-22
  • 打赏
  • 举报
回复
retrun了,我没写出来
我用的就是powerstation和visual fortran啊
唉!每人帮我。。。。。。
syy64 2004-04-22
  • 打赏
  • 举报
回复
vc++里只有指针、地址、和引用才能得到返回值,简单变量是无法得到返回值的。
syy64 2004-04-22
  • 打赏
  • 举报
回复
你只能多了解vfortran怎样建动态连接库,和vc++怎样调动态连接库,vc++动态连接库参考vc++技术内幕,vfortran建动态连接库,我想比较简单,主要考虑参数的一致。
A_Qiao 2004-04-21
  • 打赏
  • 举报
回复
这个主题有意思,先顶一下。
gigiyu 2004-04-21
  • 打赏
  • 举报
回复
不懂你说什么
wangyanyan 2004-04-21
  • 打赏
  • 举报
回复
帮你顶
jnlon 2004-04-21
  • 打赏
  • 举报
回复
不明白。
syy64 2004-04-21
  • 打赏
  • 举报
回复
fortran 已经很少用了,我用过将进10年了,你知道powerstation吗?
菜牛 2004-04-21
  • 打赏
  • 举报
回复
你没有返回呀。
agong1980 2004-04-21
  • 打赏
  • 举报
回复
不懂,只能帮你顶
agamenon 2004-04-21
  • 打赏
  • 举报
回复
在vc里载入visual fortran生成的动态链接库,没有成功。这个程序从http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1303
下载
动态链接库里的子程序返回一个单参数数值和一个数组。比如返回的是n=5,和a(3,3)
但在vc里调用是那个单参数值却变成了0,计算的数组值也不对,下面是计算数组值的fortran子程序:
DO i=1,3
DO j=1,3
arr(i,j)=10.1*i+j
END DO
END DO
结果是33.3
显然是不对的。
帮我!!!!!!!!
菜牛 2004-04-21
  • 打赏
  • 举报
回复
没讲清楚。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧