- - PR -
Intel Visual Fortran 8.1で作成のDLLを VB6.0 で使うには?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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/ |
|
投稿日時: 2005-03-16 22:40
甕星さん、書き込みありがとうございます。
最初の投稿では VB からの呼び出し時の関数名が MyDll、 Fortran での定義が MyDLL と大文字と小文字が入り混じっていたので、 MyDLLに修正しました。 また、ファイルへのパスを再度確認しましたが、間違っていないようです。 結局、まだこのコードは動いていません。 Fortran で作った DLL を実行する際に、システムフォルダに 必要な DLL があるという話をどこかで見たような気がするのですが (残念ながらどこで見たのか失念してしまいました)、 これについて何かご存知の方がいらっしゃいませんか? |
1