As mentioned, the module I have is from another compiler. Here is a part of it:
MODULE maxwell
USE IFWINTY
USE IFCOM
IMPLICIT NONE
! CLSIDs
TYPE (GUID), PARAMETER :: CLSID_MaxwellAppComInterface = &
GUID(#997B84AF, #0946, #4236, &
CHAR('9A'X)//CHAR('32'X)//CHAR('30'X)//CHAR('37'X)// &
CHAR('E0'X)//CHAR('07'X)//CHAR('02'X)//CHAR('12'X))
! IIDs
TYPE (GUID), PARAMETER :: IID_IMaxwellAppComInterface = &
GUID(#35C06A88, #6BF1, #453E, &
CHAR('B9'X)//CHAR('AD'X)//CHAR('E0'X)//CHAR('4C'X)// &
CHAR('AA'X)//CHAR('7F'X)//CHAR('75'X)//CHAR('A6'X))
TYPE (GUID), PARAMETER :: IID_IMaxwellAppComInterfaceV12 = &
GUID(#9BF2FF5F, #22EC, #4C0F, &
CHAR('BD'X)//CHAR('99'X)//CHAR('DD'X)//CHAR('8E'X)// &
CHAR('5E'X)//CHAR('BA'X)//CHAR('2D'X)//CHAR('7B'X))
! Interfaces
INTERFACE
!method GetAppDesktop
INTEGER(4) FUNCTION IMaxwellAppComInterface_GetAppDesktop($OBJECT, pVal)
INTEGER(INT_PTR_KIND()), INTENT(IN) :: $OBJECT ! Object Pointer
!DEC$ ATTRIBUTES VALUE :: $OBJECT
INTEGER(INT_PTR_KIND()), INTENT(OUT) :: pVal ! IDispatch
!DEC$ ATTRIBUTES REFERENCE :: pVal
!DEC$ ATTRIBUTES STDCALL :: IMaxwellAppComInterface_GetAppDesktop
END FUNCTION IMaxwellAppComInterface_GetAppDesktop
END INTERFACE
POINTER(IMaxwellAppComInterface_GetAppDesktop_PTR, IMaxwellAppComInterface_GetAppDesktop) ! routine pointer
! Module Procedures
CONTAINS
!method GetAppDesktop
!INTEGER(INT_PTR_KIND()) FUNCTION $Application_GetWorkbooks($OBJECT, $STATUS)
INTEGER(4) FUNCTION $IMaxwellAppComInterface_GetAppDesktop($OBJECT, pVal)
IMPLICIT NONE
INTEGER(INT_PTR_KIND()), INTENT(IN) :: $OBJECT ! Object Pointer
!DEC$ ATTRIBUTES VALUE :: $OBJECT
INTEGER(INT_PTR_KIND()), INTENT(OUT) :: pVal ! IDispatch
!DEC$ ATTRIBUTES REFERENCE :: pVal
INTEGER(4) $RETURN
INTEGER(INT_PTR_KIND()) $VTBL ! Interface Function Table
POINTER($VPTR, $VTBL)
$VPTR = $OBJECT ! Interface Function Table
$VPTR = $VTBL + 28 ! Add routine table offset
IMaxwellAppComInterface_GetAppDesktop_PTR = $VTBL
$RETURN = IMaxwellAppComInterface_GetAppDesktop($OBJECT, pVal)
$IMaxwellAppComInterface_GetAppDesktop = $RETURN
END FUNCTION $IMaxwellAppComInterface_GetAppDesktop
END MODULE
The main code starts with something like this:
! Initialize object pointers
CALL INITOBJECTS()
CALL COMINITIALIZE(status)
write(*,*) 'Opens the Maxwell script interface'
CALL COMCREATEOBJECT ('AnsoftMaxwell.MaxwellScriptInterface', maxwellapp, status)
IF (maxwellapp == 0) THEN
WRITE (*, '(' Unable to create Excel object; Aborting')')
CALL EXIT()
else
write(*,'(' Maxwell object created')')
END IF
write(*,*) 'Perform some FEA calculations'
write(*,*) maxwellapp
desktop = IMaxwellAppComInterface_GetAppDesktop(maxwellapp, pVal)
read(*,*)
I would really like to get this working as this would save a lot of time port FTN95 to something else. I would not mind to make an example available if I get it to work.