FreeBASIC マニュアルのトップに戻る

FreeBASIC Excel で使う DLL を作る

目次→フォーラム→FreeBASIC→補足Constructing a dll for Excel (tutorial for newbies like me)←オリジナル・サイト

Excel で使う DLL を作る 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

 私は、プログラミングの専門家ではないので、初心者が FreeBASIC を実務に使おうとするときに直面する困難を、理解できると思います。
 そこで、単純な FreeBASIC の dll を作って、Excel で使う方法の、小さな段階的なチュートリアルを提供します。
 熟練したユーザは、このようなものを構築するのに苦労しないでしょうが、初心者は、パズルのピースを組み立てるためにいら立つことがあるでしょう。そこで、この段階的なチュートリアルが、役に立つことを望みます。
 Excel で dll を使う理由はなんでしょうか。
 多くの理由がありますが、そのうちの1つは、FreeBASIC の dll で、重たい計算のいくつかを行ない、その結果を Excel に渡すほうが、はるかに速いかもしれないということです。
 それでは、始めましょう。

第1のタスク:Excel からアクセスできる dll 内の、簡単な関数を構築

まず FreeBASIC のエディターを開いて、下記をタイプしてください。

Function cube alias "cube" ( ByVal arg As Double) As Double Export
    cube=arg^3
End Function

次に、このコードを dllex1.bas として保存して、コンパイラーのコマンドで、以下の設定を使ってコンパイルします。

<fbc> -dll <filename>

そして、Excel スプレッド・シートを開いてください。
メニューの「ツール」→「マクロ」で、Visual Basic エディターを開きます。
新しい標準モジュールを選択して挿入します。
そして、下記をタイプします。

Declare Function cube Lib "dllex1.dll" Alias "cube@8" (ByVal arg As Double) As Double
文字列「dllex1.dll」は、あなたの dll のフルパスにする必要があります。
例えば、C:\My Documents\FreeBasic\Projects\Excel dll Project\dllex1.dll

下記を、Excel の セルの1つに入力します。

= cube(4)
結果が表示されるでしょう。

第2のタスク:配列を dll 関数に渡す

次のコード(dllex2.bas)を、dll コンパイラー中の dll として、コンパイルしてください。

Function mean Alias "mean" (byval a as double ptr, byval Itter as double) as double Export
   Dim i as integer
   Dim aa as double
   For i=1 to Itter
      aa=aa+a[i]
   Next i
   mean=aa/Itter
End Function

Excel の vba モジュールに、以下のコードを書いてください。

Declare Function mean Lib "dllex2.dll" Alias "mean@12" (ByRef paramvalue As Double, ByVal paramvalueit As Double) As Double
Function meanfunction()
    Dim a(1000) As Double
    Dim i As Integer
    For i = 1 To 1000
        a(i) = Rnd()
    Next i
    meanfunction = mean(a(0), 1000)
End Function
ここでも、dll へのフルパスを含めることを忘れないでください。
そして、Excel のセルに以下を入力すると…

=meanfunction()
Excel は、dll に1000の乱数を入れた配列のアドレスを送っています。そして、dllは、関数で、それらの値の平均値を返します。

次のステップとして、dll 内から Excel の配列の値を設定することも、非常に簡単です。
次の dll 関数は、この例です。

Function setdata Alias "setdata" (byval a as double ptr, byval Itter as double) as double Export
   Dim i as integer
   For i=1 to Itter
      a[i]=i
   Next i
   setdata=1
End Function

実例をダウンロード

以下で、実例をダウンロードできます。
dll のエクスポート関数の名前を読むツールを含んでいます。
(関数宣言の終わりに、@8、@12などを付け加える必要があることが分かります。)
http://users.freebasic-portal.de/rwk/FreeBasic/ExcelDLL.zip

Excel の標準モジュールで、DLL のパスを変更することを、忘れないで下さい。
 
補足 に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2011-09-20 14:56
日本語翻訳:WATANABE Makoto、原文著作者:gbos & Drago

ホームページのトップに戻る

表示-非営利-継承