| 
 | 
 
 fortan新人在编程过程中遇到了问题,纠结了两天无果,特向高手们请教。 
  我想用VB调用fortran的DLL,使用fortran本身可以计算成功。但用VB调用dll时程序停止工作。之后尝试用fortran调用dll,输出结果为NaN。使用的是老程序,结构可能不好。原程序代码如下: 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode 
        PROGRAM FSTIF
        REAL A,B,X0,FK(4,4),XM,DENF
        DIMENSION A1(4,4),A2(4,4),A3(4,4)
        A=18.0                       ! 测试程序我自己赋的值
        B=12.0                        !同上
        X0=54.0                      !同上
        DENF=0.035885        !同上
        XM=1.0                      !同上
        DO 12 I=1,4
        DO 12 J=1,4
        A1(I,J)=0.
        A2(I,J)=0.
 12   A3(I,J)=0.
        V1=X0*B/A/6.
        A1(1,1)=2.*V1 
        A1(2,2)=2.*V1 
        A1(3,3)=2.*V1 
        A1(4,4)=2.*V1 
        A1(1,2)=-2.0*V1
        A1(2,1)=-2.0*V1
        A1(3,4)=-2.0*V1
        A1(4,3)=-2.0*V1
        A1(1,3)=-1.0*V1  
        A1(3,1)=-1.0*V1  
        A1(2,4)=-1.0*V1  
        A1(4,2)=-1.0*V1
        A1(2,3)=V1
        A1(3,2)=V1
        A1(1,4)=V1
        A1(4,1)=V1
   2   V2=X0*A/B/6.
        A2(1,1)=(2.-A/X0)*V2 
        A2(4,4)=(2.-A/X0)*V2
        A2(1,3)=-V2
        A2(3,1)=-V2
        A2(2,4)=-V2
        A2(4,2)=-V2
        A2(2,2)=(2.+A/X0)*V2
        A2(3,3)=(2.+A/X0)*V2
        A2(1,4)=-(2.-A/X0)*V2
        A2(4,1)=-(2.-A/X0)*V2
        A2(2,3)=-(2.+A/X0)*V2
        A2(3,2)=-(2.+A/X0)*V2
        A2(1,2)=V2
        A2(2,1)=V2
        A2(3,4)=V2
        A2(4,3)=V2
   3   V3=B/A/A/12.
        IF(A .EQ. X0) X0=X0+.001
        E1=((A+X0)*(A+X0)*ALOG((X0+A)/(X0-A))-2.*A*(2.*A+X0))*V3
        E2=((A-X0)*(A-X0)*ALOG((X0+A)/(X0-A))+2.*A*(2.*A-X0))*V3
        E3=((A-X0)*(A+X0)*ALOG((X0+A)/(X0-A))+2.*A*X0)*V3
        IF(A .EQ. X0) X0=X0-.001
        A3(1,1)=2.*E1 
        A3(4,4)=2.*E1  
         A3(2,2)=2.*E2
        A3(3,3)=2.*E2
        A3(1,2)=2.*E3
        A3(2,1)=2.*E3
        A3(3,4)=2.*E3
        A3(4,3)=2.*E3
        A3(1,3)=E3
        A3(3,1)=E3
        A3(2,4)=E3
        A3(4,2)=E3
        A3(1,4)=E1
        A3(4,1)=E1
        A3(2,3)=E1
        A3(3,2)=E2
        DO 10 I=1,4
        DO 10 J=1,4
 10   FK(I,J)=3.14159*(A1(I,J)+A2(I,J)+A3(I,J)*XM*XM)/DENF
        PRINT *, ((FK(I,J),J=1 ,4),I=1,4)
        END 
以上程序可以运行并能输出结果。下面是把程序该为dll的代码: 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode SUBROUTINE FSTIF(A,B,XO,FK,XM,DENF)
       !DEC$ attributes dllexport ::FSTIF
       REAL A,B,X0,FK(4,4),XM,DENF
       DIMENSION A1(4,4),A2(4,4),A3(4,4)
       DO 12 I=1,4
       DO 12 J=1,4
       A1(I,J)=0.
       A2(I,J)=0. 
后面的都一样了,不粘了。用fortran做了个简单的调用dll的程序: 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode PROGRAM SFTIFss
      REAL A,B,X0,XM,DENF,FK(4,4)
      DO 10 I=1,4
      DO 10 J=1,4
10  FK(I,J)=0.0
      A=18.0
      B=12.0
      X0=54.0
      DENF=0.035885
      XM=1.0
      CALL FSTIF(A,B,X0,FK,XM,DENF)
      PRINT *, ((FK(I,J),J=1,4),I=1,4)
      END 
但输出结果全为NaN,故请高手们能答疑解惑,问题出在哪里? 
   
 
 
 
 |   
 
 
 
 |