Fortran と MASM の呼び出し規約

MASM 手続の呼び出し規約は,PROTO および PROC 命令で指定します。PROTO および PROC 命令の STDCALL オプションは,手続に対して STDCALL 呼び出し規約を使用するように指示します。PROTO および PROC 命令の C オプションは,手続に対して C 呼び出し規約を使用するように指示します。PROC 命令の USES オプションは,呼び出された MASM ルーチン中で,どのレジスタを保存し復元するのかを指定します。PROTO および PROC 命令の VARARG オプションは,手続が可変個の引数を受け付けることを指定します。

例として,次の Fortran と MASM の文は,Visual Fortran から STDCALL 呼び出し規約を使って呼び出せる MASM 関数を設定しています。

Fortran コード:

	! Fortran STDCALL インタフェース・プロトタイプ
	  INTERFACE
	    INTEGER FUNCTION forfunc(I1, I2)
	    !DEC$ ATTRIBUTES STDCALL :: forfunc
	    INTEGER I1
	    INTEGER(2) I2
	  END INTERFACE
	  WRITE (*,*) forfunc(I1,I2)

MASM コード:

	;MASM STDCALL プロトタイプ
		.MODEL FLAT, STDCALL
	forfunc PROTO STDCALL, forint: SDWORD, shorti: ptr SWORD
		.CODE
	forfunc PROC STDCALL, forint: SDWORD, shorti: ptr SWORD
		...
	forfunc ENDP END

次の Fortran と MASM の文は,C 呼び出し規約を使って,Fortran から呼び出せる MASM 関数を設定しています。

Fortran コード:

	! Fortran C インタフェース・プロトタイプ
	  INTERFACE
	    INTEGER FUNCTION Forfunc (I1, I2)
	    !DEC$ ATTRIBUTES C, ALIAS:'Forfunc' :: Forfunc
	    INTEGER I1
	    INTEGER(2) I2
	    END FUNCTION
	  END INTERFACE
	  WRITE(*,*) Forfunc (I1, I2)
	  END

MASM コード:

	;MASM C プロトタイプ
		.MODEL FLAT, C
	Forfunc PROTO C, forint:SDWORD, shorti: ptr SWORD
		.CODE
	Forfunc PROC C, forint:SDWORD, shorti: ptr SWORD
		...
	Forfunc ENDP END