参考原文:https://blog.csdn.net/SinjoyWong/article/details/70138960
在用intel fortran写一个DLL程序的时候,发现数据结构比较复杂,所以使用了fortran90中新增的结构体。因为abaqus只能识别.for格式的文件,一开始以为fortran77是无法使用结构体的。
在写的过程中,直接将结构体对象的名称作为子程序的形参。一直报错,表示实参与形参的类型不统一。
在确认语法没错之后,在网上查找了很长时间,但是除了语法层面外仍没有解释。后来有人建议将Debug改为Release,遂尝试之,顺利通过。
---------------------------------------------------
我的经验:想编译一个dll给VBNET调用
----------------------------------------------------
SUBROUTINE SAP(NJ,N,NE,NPJ,NPF,JN,X,Y,JE,JEAI,EAI,JPJ,PJ,JPF,PF,F,FM)
!********* ANALYSIS PROGRAM FOR PLANE FRAME ****************
!MS$ATTRIBUTES DLLEXPORT,STDCALL,ALIAS:'PFSAP' :: PFSAP
!DEC$ ATTRIBUTES VALUE :: NJ,N,NE,NPJ,NPF
!DEC$ ATTRIBUTES REFERENCE :: JN,JE,JEAI,JPJ,JPF
!DEC$ ATTRIBUTES REFERENCE ::X,Y,EAI,PJ,PF,F,FM
INTEGER(4),INTENT(IN) :: NJ,N,NE,NPJ,NPF
INTEGER(4),INTENT(IN) :: JN(3,100),JE(2,100),JEAI(100),JPJ(100),JPF(2,100)
REAL(8),INTENT(IN) :: X(100),Y(100),EAI(3,100),PJ(100),PF(2,100)
REAL(8),INTENT(OUT) :: F(100,3),FM(100,6)
后面程序中的变量都定义为INTEGER或 REAL
编译报错
错误 error #6633: The type of the actual argument differs from the type of the dummy argument. [Y] J:\Recent\VB\WindowsApp1\PlaneFrame\PlaneFrame.f90 19
将红色代码改为:(删除 (8))
REAL,INTENT(IN) :: X(100),Y(100),EAI(3,100),PJ(100),PF(2,100)
REAL,INTENT(OUT) :: F(100,3),FM(100,6)
再编译 则成功
分析:主要是因为上下文中的变量定义不一致