将子程序编成DLL再在主程序中调用
PROGRAM IMEXPORT
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL1_COMMON/, /DLL2_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = 1.0
DLL2_DATA = 1.0
CALL MAIN_SUB
CALL DLL1_SUB
CALL DLL2_SUB
END
SUBROUTINE MAIN_SUB
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL1_COMMON/, /DLL2_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = DLL1_DATA + 1
DLL2_DATA = DLL2_DATA + 1
WRITE (6,*) 'In MAIN_SUB, values are: ', DLL1_DATA, DLL2_DATA
END
C This software DLL1.FOR is part of the Compaq Visual Fortran kit.
C PROGRAM DLL1
END
SUBROUTINE DLL1_SUB
cDEC$ ATTRIBUTES DLLEXPORT:: /DLL1_COMMON/, DLL1_SUB
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL2_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = DLL1_DATA + 1
DLL2_DATA = DLL2_DATA + 1
WRITE (6,*) 'In DLL1_SUB, values are: ', DLL1_DATA, DLL2_DATA
END
SUBROUTINE DLL2_SUB
cDEC$ ATTRIBUTES DLLEXPORT:: /DLL2_COMMON/, DLL2_SUB
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL1_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = DLL1_DATA + 1
DLL2_DATA = DLL2_DATA + 1
WRITE (6,*) 'In DLL2_SUB, values are: ', DLL1_DATA, DLL2_DATA
END
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL1_COMMON/, /DLL2_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = 1.0
DLL2_DATA = 1.0
CALL MAIN_SUB
CALL DLL1_SUB
CALL DLL2_SUB
END
SUBROUTINE MAIN_SUB
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL1_COMMON/, /DLL2_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = DLL1_DATA + 1
DLL2_DATA = DLL2_DATA + 1
WRITE (6,*) 'In MAIN_SUB, values are: ', DLL1_DATA, DLL2_DATA
END
C This software DLL1.FOR is part of the Compaq Visual Fortran kit.
C PROGRAM DLL1
END
SUBROUTINE DLL1_SUB
cDEC$ ATTRIBUTES DLLEXPORT:: /DLL1_COMMON/, DLL1_SUB
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL2_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = DLL1_DATA + 1
DLL2_DATA = DLL2_DATA + 1
WRITE (6,*) 'In DLL1_SUB, values are: ', DLL1_DATA, DLL2_DATA
END
SUBROUTINE DLL2_SUB
cDEC$ ATTRIBUTES DLLEXPORT:: /DLL2_COMMON/, DLL2_SUB
cDEC$ ATTRIBUTES DLLIMPORT:: /DLL1_COMMON/
COMMON /DLL1_COMMON/ DLL1_DATA
COMMON /DLL2_COMMON/ DLL2_DATA
REAL DLL1_DATA, DLL2_DATA
DLL1_DATA = DLL1_DATA + 1
DLL2_DATA = DLL2_DATA + 1
WRITE (6,*) 'In DLL2_SUB, values are: ', DLL1_DATA, DLL2_DATA
END
[此贴子已经被作者于2007-6-8 10:31:50编辑过]