- ベストアンサー
VBAからDLLをCALLしたいのですが
仕事上今まで蓄積されているFortranプログラムを効率よく使いたくDLL,VB,VBAにチャレンジしていますが, Intel(R) Fortran Compiler9.0で作成したDLLをEXCELのVBAからCALLしたところ 実行時エラー'49' DLLが正しく呼び出せません のエラーが表示されました。 このDLLはVisual Basic .NETで作成したVBからは正しくCALLできています。 色々原因を調べているのですがVBAからDLLの呼び出しとDLL内の計算は正しく行われておりDLLからVBAに戻るときにエラーになっているようです。 テストを行っているFortranとVBAのソースは以下です。VBAでDLLをCALL出来るように解決いたしたくご教授願お願いいたします。 (1)---- Fortran ソース --------------------------- subroutine DLL1(Q,QQ,QQQ) ! Expose subroutine DLL1 to users of this DLL ! !DEC$ ATTRIBUTES DLLEXPORT::DLL1 !DEC$ ATTRIBUTES ALIAS:'DLL1'::DLL1 ! Variables ! Body of DLL1 real*4 Q,QQ,QQQ QQ = Q*2 QQQ = Q**3 end subroutine DLL1 (2)----------- VBA ソース -------------------- Private Q As Single Private QQ As Single Private QQQ As Single Declare Sub DLL1 Lib "DLL1.dll" (ByRef Q As Single, ByRef QQ As Single, ByRef QQQ As Single) Sub Macro1() ChDrive ActiveWorkbook.Path ChDir ActiveWorkbook.Path Q = 2# Call DLL1(Q, QQ, QQQ) Cells(5, 2) = Format(Q, "#####.#0") Cells(6, 2) = Format(QQ, "#####.#0") Cells(7, 2) = Format(QQQ, "#####.#0") End Sub
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (8)
- kurinkurinkurin
- ベストアンサー率72% (13/18)
- dsuekichi
- ベストアンサー率64% (171/265)
- junbei
- ベストアンサー率55% (5/9)
- junbei
- ベストアンサー率55% (5/9)
- kurinkurinkurin
- ベストアンサー率72% (13/18)
- kurinkurinkurin
- ベストアンサー率72% (13/18)
- dsuekichi
- ベストアンサー率64% (171/265)
- junbei
- ベストアンサー率55% (5/9)
補足
回答ありがとうございました。 教えていただいたHPアクセスして内容確認したのですが理解不足でした。 新たなご指摘どおりの修正でDLLをCALLすることができました。 ものすごく前進しました。ただ、QQとQQQに結果が返ってきていません。DLLの処理ではQQは4.0、QQQは8.0が戻されるはずですがVBAで呼出し語確認したところ初期設定された値のままです。(両方とも0.0に初期設定しました) 値渡しと参照渡しでまだとり違いがあるのでしょうか。 更なるご指導よろしくお願いいたします。