- (1) Fortran90の場合
- Intel Fortran を使う場合のサンプルコードをいかに示します。他のFortranコンパイラを使用する際は各コンパイラのDLL呼び出し方法の説明を参照してください。
!----- begining of sample code -----
PROGRAM usedrfftmr
implicit none
integer, parameter:: n = 3300
double precision, dimension(0:(n-1)):: x
integer isn, icon
integer i
character(10) cal_time
INTERFACE
SUBROUTINE DRFFTMR (x, n, isn, icon)
!DEC$ ATTRIBUTES DLLIMPORT :: DRFFTMR
!DEC$ ATTRIBUTES ALIAS:'DRFFTMR' :: DRFFTMR
integer n, isn, icon
double precision, dimension(0:(n-1)):: x
END SUBROUTINE DRFFTMR
END INTERFACE
open(11,file="acc.txt",status="old", action="read")
read(11,*) (x(i), i = 0, n-1)
close(11)
isn = 1
open(14,file="testout.txt",status="unknown", action="write")
call date_and_time(time = cal_time)
write(*,'(1x,a)') 'start time = '//cal_time
call DRFFTMR(x, n, isn, icon)
write(6,*) 'icon = ',icon
isn = -1
call DRFFTMR(x, n, isn, icon)
write(6,*) 'icon = ',icon
call date_and_time(time = cal_time)
write(*,'(1x,a)') 'end time = '//cal_time
write(14,'(e23.14)') (x(i)/2/n, i = 0, n-1)
endfile(14)
close(14)
END program usedrfftmr
!----- end of sample code -----
- この後プロジェクトに drfftmr.lib を追加してビルドします。できあがった実行ファイルと同じフォルダ(またはパスがきってあるフォルダ)に drfftmr.dll を置いて実行します。
- 本プログラムのソースコードもFortran90なので、コードをぺたぺたと切り貼りして一緒の実行ファイルにしてしまう手もありますね。
- (2) Visual Basic または VBA などから呼び出す場合
- まず標準モジュール(ファイル名 ********.bas )に次のように記述します
' ----- begining of sample code -----
Declare Sub DRFFTMR Lib "drfftmr.dll" _
(x As Double, n As Long, isn As Long, icon As Long)
' ----- end of sample code -----
- WindowsAPI を使うような場合も似た記述を行うので、解説書の類には大体このようなDLLを使う際のやり方が記述されています。
- 次に実際にイベントコードを記述します。例えば次のような感じです。
' ----- begining of sample code -----
Private Sub Command1_Click()
Dim n As Long
Dim x(0 To 3299) As Double
Dim isn As Long
Dim icon As Long
n = 3300
' 配列 x にデータをセットします。次のようにファイルから読んだり
' エクセルVBA 等の場合はワークシートから読む方法もあります。
Open "acc.txt" For Input Access Read As #1
Open "testout.txt" For Output Access Write As #2
For i = 0 To n - 1
Input #1, x(i)
Next
Close #1
isn = 1
Call DRFFTMR(x(0), n, isn, icon)
' 計算結果を出力します。次のようにファイルに書き出したり、
' エクセルワークシートに出力したりできます。
For k = 0 To (n - 1)
Print #2, x(k)
Next
Close #2
End Sub
' ----- end of sample code -----
- このイベントが実行されるとDRFFTMRが呼び出されます。もちろんdrfftmr.dllは実行ファイルと同じフォルダところに置くかパスのきってあるフォルダに置かなければいけません
- (3) C/C++ から呼び出す方法
- お手元のコンパイラでお試しいただけますでしょうか。
|