Fortran アプリケーションから COM を動作させようとしています。a のCOMINITIALIZE
後に aを実行しCOMCreateObjectByProgID
ます。これらは両方とも成功したように見え、ゼロのステータスを返します。ただし、COM オブジェクトを使用しようとすると、次のようになります。
Unhandled exception at 0x00000000 in FortranProg01.exe: 0xC0000005: Access violation.
このエラーはほとんどすべてのことを意味する可能性があることは理解していますが、この問題を引き起こす COM の一般的な問題について何か提案をした人はいますか? 私のプログラムコード:
program FortranProg01
use myolepg
implicit none
integer*4 comInitStatus
integer:: comCreateStatus
INTEGER(INT_PTR_KIND()) $OBJECT
INTEGER(4) funcResult
REAL(8) pkgVersion
call COMINITIALIZE(comInitStatus)
print *, comInitStatus
call COMCreateObjectByProgID('MyOlePg.MyOlePkg', $OBJECT, comCreateStatus)
print *, comCreateStatus
funcResult = IMyOlePkg_GetPackageVersion($OBJECT, pkgVersion)
print *, funcResult
call COMUNINITIALIZE()
end program FortranProg01
ウィザードで生成されたインターフェイス コード:
INTERFACE
!property PackageVersion
INTEGER(4) FUNCTION IMyOlePkg_GetPackageVersion($OBJECT, pVal)
INTEGER(INT_PTR_KIND()), INTENT(IN) :: $OBJECT ! Object Pointer
!DEC$ ATTRIBUTES VALUE :: $OBJECT
REAL(8), INTENT(OUT) :: pVal
!DEC$ ATTRIBUTES REFERENCE :: pVal
!DEC$ ATTRIBUTES STDCALL :: IMyOlePkg_GetPackageVersion
END FUNCTION IMyOlePkg_GetPackageVersion
END INTERFACE
どんな助けでも大歓迎です!