- PR -

Intel Visual Fortran 8.1で作成のDLLを VB6.0 で使うには?

1
投稿者投稿内容
DoctorGroove
会議室デビュー日: 2005/03/16
投稿数: 2
投稿日時: 2005-03-16 20:31
初めて投稿します。

掲題の通りですが、Intel Visual Fortran 8.1 で記述したサブルーチンを
DLL 化し、Visual Basic 6.0 で使用したいと考えております。

自分なりにいろいろ調べてみて、下記のようなプログラムを
作りました。VB 側で用意した3×4の配列の各要素を、
Fortran のサブルーチンで2倍するというプログラムです。

Fortran でビルドした MyDLL.dll を VB プロジェクトと
同じフォルダにコピーして実行すると、下記のエラーメッセージが出て
MyDll (3), (4), mat の部分で止まってしまいます。

実行時エラー '53':
ファイルが見つかりません:C:\Documents and Settings\Test_VB_DLL\MyDLL.dll

もちろん MyDLL.dll はこのフォルダに置いてあります。
何が原因なのか、ご教示いただけないでしょうか。


================================ Visual Basic 6.0

Private Declare Sub MyDLL Lib _
"C:\Documents and Settings\Test_VB_DLL\MyDLL.dll" _
(n1 As Long, n2 As Long, mat() As Double)

Private Sub cmdDouble_Click()

'行列初期値
Dim mat(1 To 3, 1 To 4) As Double
For i1 = 1 To 3
For i2 = 1 To 4
mat(i1, i2) = 10# * CDbl(i1) + CDbl(i2)
Next i2
Next i1

'配列を2倍(DLL使用)
MyDLL (3), (4), mat

'結果確認
ShowResults

End Sub


======================== Intel Visual Fortran 8.1

subroutine MyDLL( n1, n2, mat )

!DEC$ ATTRIBUTES DLLEXPORT :: MyDLL
!DEC$ ATTRIBUTES ALIAS : 'MyDLL' :: MyDLL

implicit none
integer(4) :: n1, n2
real(8), dimension( 1 : n1, 1 : n2 ) :: mat

mat = 2.0 * mat

end subroutine




[ メッセージ編集済み 編集者: DoctorGroove 編集日時 2005-03-16 20:32 ]

[ メッセージ編集済み 編集者: DoctorGroove 編集日時 2005-03-16 22:33 ]

[ メッセージ編集済み 編集者: DoctorGroove 編集日時 2005-03-16 22:33 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-03-16 22:27
「ファイルが見つかりません」のエラーが出るのは、DLLファイルが見つからないときと、関数が見つからないときです。したがって関数名が間違っているか、ファイルのパスを間違えているのでしょう。

残念ながらFortranの仕様は知りません。VB6.0から呼び出せるDLL形式は厳密に決まっています。その形式にあわせて、Fortran側の設定やオプションで、VB6.0からも問題なく使用できるDLLを作る必要があるでしょう。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
DoctorGroove
会議室デビュー日: 2005/03/16
投稿数: 2
投稿日時: 2005-03-16 22:40
甕星さん、書き込みありがとうございます。

最初の投稿では VB からの呼び出し時の関数名が MyDll、
Fortran での定義が MyDLL と大文字と小文字が入り混じっていたので、
MyDLLに修正しました。

また、ファイルへのパスを再度確認しましたが、間違っていないようです。

結局、まだこのコードは動いていません。

Fortran で作った DLL を実行する際に、システムフォルダに
必要な DLL があるという話をどこかで見たような気がするのですが
(残念ながらどこで見たのか失念してしまいました)、
これについて何かご存知の方がいらっしゃいませんか?

1

スキルアップ/キャリアアップ(JOB@IT)