1章:DLLの作成方法とVBAから呼び出し方法

    作成2015.07.05

  1. 開発環境
     個人的理由で以下の環境となります。
    (1)OS:Windows 7 Home Premium
    (2)パソコン:Inspiron ONE2320
    (3)プロセッサ:Pentium(R) CPU G630 @2.70GHz
    (4)実装メモリ:4GB
    (5)Visual Studio:Visual Studio Express 2012 for Windows Desktop
    (6)EXCEL:Microsoft Office XP


  2. DLLの作成方法
    (1) 「VS Express for Desktop」を右クリックして管理者として実行します。



    (2)メニューの「ファイル」_「新しいプロジェクト」を選択します。
    (3)テンプレートは、Visual C++ Win32コンソールアプリケーションを選択します。 
    (4)名前に「DLL_TEST」と入力します。(ソリューション名は自動的に同じとなります。)



    (5)OKボタンを押します。
    (6)次へのボタンを押します。
    (7)ラジオボタンでDLLを選択します。



    (8)完了ボタンを押します。



    (9)デホルトでDLL_TEST.defファイルが組み込まれていません。(C++V6では、defファイルが自動生成され、プロジェクトの関連付けも完了していました。)
    (10)したがって、手動でdefファイルを生成して、プロジェクトの関連付けを行う必要があります。
    (11)「ソースファイル」を右クリックして「追加」_「新しい項目」を選択します。



    (12)選択項目にdefファイルがありませんが、驚くことはありません。名前に「DLL_TEST.def」と入力します。



    (13)追加ボタンを押します。



    (14)「DLL_TEST.def」ファイルが追加されました。
    (15)次に「DLL_TEST.def」とプロジェクトの関連付けを行います。
    (16)メニューの「プロジェクト」_「DLL_TESTのプロパティ」を選択します。
    (17)「構成プロパティ」_「リンカ」_「モジュール定義ファイル」に「DLL_TEST.def」と入力します。



    (18)適用ボタンを押します。
    (19)標準文字セットが日本語対応でないため、設定を変更します。
    (20)「構成プロパティ」_「全般」_「文字セット」で「マルチバイト文字セットを使用する」を選択します。



    (21)適用ボタンを押し、OKボタンを押します。
    (22)「DLL_TEST.cpp」をダブルクリックします。
    (23)以下のコードに書き換えます。
    // DLL_TEST.cpp : DLL アプリケーション用にエクスポートされる関数を定義します。
    //
    
    #include "stdafx.h"
    #include <windows.h> 
     
     void __stdcall DLL_TEST1()
     {  
    	 MessageBox(NULL, "DLL呼び出し成功!", "test", MB_OK);  
    	 Beep(523,200);                    
     }  
    
     double __stdcall ADD(double a,double b)
     {
    	 return a+b;
     }
    



    (24)「DLL_TEST.def」をダブルクリックします。
    (25)以下のコードを書込みます。
    EXPORTS
    DLL_TEST1
    ADD @16

    *コード説明
    *void __stdcall DLL_TEST1()は変数の受け渡しの無いサブルーチンでEXPORTSはDLL_TEST1となります。
    *double __stdcall ADD(double a,double b)は8バイト、2個の変数を受取るためADD @16と記述します。
    *__stdcallは外部参照のサブルーチンを意味します。



    (26)「ビルド」_「ソリューションのビルド」を選択します。



    (27)DLL_TEST\Debugフォルダー内にDLL_TEST.dllが完成しました。
    (28)VBAで呼び出しやすいように、C:直下に「VBA_C_APP」フォルダーを作成します。
    (29)C:\VBA_C_APPにDLL_TEST.dllファイルをコピーします。
     *以上でVBAから呼び出すDLLファイル作成作業が完了します。


  3. DLLの呼び出し方法
    ***C:\VBA_C_APPフォルダーにDLL_TEST.dllファイルがあるのが前提条件です!!
    (1)EXCELを起動します。
    (2)ファイル名「DLL_TEST」で保存します。
    (3)「表示」_「ツールバー」_「Visual Basic」を選択します。



    (4)「Visual Basic Editor」ボタンを押します。



    (5)メニュー「挿入」_「標準モジュール」を選択します。



    (6)以下のコードを書込みます。
    Declare Sub DLL_TEST1 Lib "C:\VBA_C_APP\DLL_TEST.dll" ()
    Declare Function ADD Lib "C:\VBA_C_APP\DLL_TEST.dll" (ByVal a As Double, ByVal b As Double) As Double
     
     Sub test1()
          DLL_TEST1
     End Sub
     
     Sub test2()
        C = ADD(2.1, 1.5)
        Range("A1").Select
        ActiveCell.Value = C
     End Sub
    



    (7)マクロの実行ボタンを押します。



    (8)test1を選択して実行ボタンを押します。



    (9)以下のメッセージが表示されます。



    (10)OKボタンを押すとビープ音が鳴ります。
    (11)同様にしてtest2を実行します。
    (12)A1セルが選択され、3.6が出力されます。



    (13)上書き保存して終了します。


  4. 1章:DLLの作成方法とVBAから呼び出し方法の完成ファイル
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
     
    [1章:DLLの作成方法とVBAから呼び出し方法の完成ファイル]をダウンロードする。
     解凍すると「DLL_TEST」フォルダーとDLL_TEST.xlsがあります。


  5. DLLの作成方法とVBAから呼び出し方法まとめ
    (1)シミュレーションにおいては、計算部分をC言語で作成し、入力と出力部分をVBAで作成するのが最も効率的です。
    (2)このため多くのシミュレーションプログラムにおいて、入出力をVBA、計算部分をC++(V6)で作成しました。
    (3)C++(V6)自体は、現在使用パソコンの状態が変化したため、互換性に問題が生じて正常には動作しなくなりました。
    (4)Visual Studio:Visual Studio Express 2012 for Windows DesktopはC++(V6)と操作が異なるため、VBAで呼び出し可能なDLLが作成できなかったのですが、今回の検討で可能となりました。




2章:近接露光計算プログラムのソース公開と修正:に行く。

トップページに戻る。