|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
VC6调用Fortran程序,无法返回计算的输出值!
GTD7(&IYD,&SEC,&ALT,&GLAT,&GLONG,&STL,&F107A,&F107,&AP,&MASS,D,T),是fortran程序,前面是输入参数,D和T都是数组,是输出的计算结果
调试过程中,GTD7()函数内部计算正确,但是返回后没有值,
fprintf(fpout," out:::::::\n %8.5f %8.5f\n", D[5], T[1]);这一语句输出为:
out:::::::
-92559631349317831000000000000000000000000000000000000000000000.00000 -92559631349317831000000000000000000000000000000000000000000000.00000
GTD7为F77程序在Compaq Visual Fortran version 6.6 编译生成的DLL和LIB。
文件头部代码:
SUBROUTINE GTD7(IYD,SEC,ALT,GLAT,GLONG,STL,F107A,F107,AP,MASS,D,T)
!DEC$ ATTRIBUTES DLLEXPORT::GTD7
C!DEC$ ATTRIBUTES C, ALIAS:'_GTD7' :: GTD7
C NRLMSISE-00
(计算MSISE-00大气模型的程序)
通常可以使用“!DEC$ ATTRIBUTES C, ALIAS:'_GTD7' :: GTD7”代码来强制输出由Fortran的传址改为C语言的传值,但是可能F77不支持这行语句,加这一行语句就报错。
不知道该怎么解决VC程序调用Fortran程序,无法输出返回参数值的问题,谢谢!
下面程序中,
void CC_FDoc::OnFileNew()
{
int IYD,MASS;
double SEC,ALT,GLAT,GLONG,STL,F107A,F107,AP;
double D1,D2,D3,D4,D5,D6,D7,D8,D9;
double T1,T2;
double T[2],D[9];
double bb=10.0;
fpout = fopen("outdata.txt","w");
IYD=172; /* without effect */
SEC=29000;
ALT=30;
GLAT = 60;
GLONG = -70;
STL = 16;
F107A=150;
F107=150;
AP=4;
MASS = 48;
GTD7(&IYD,&SEC,&ALT,&GLAT,&GLONG,&STL,&F107A,&F107,&AP,&MASS,D,T);
fprintf(fpout," out:::::::\n %8.5f %8.5f\n", D[5], T[1]);
fclose(fpout);
} |
|