|
失礼します。どなたか教えてください・・・
少し長くなりますが、よろしくお願いいたします。
EXCELのセルに5つの適当な数字(「5,2,6,3,4」こんな感じです)を縦に順番に入力しまして、
それを、VBAを使って、外部のプログラム(恐らくC言語だと思います)にデータを送り、
その計算結果を、EXCELに表示させるというプログラムを組みたいのですが、
どなたか良い知恵をお貸しください・・・
上記の説明ではわかりにくいので、もう少し具体的に書かせていただきます。
以下が、EXCELのとあるセルに打ち込んだ命令です。
=dll_double_square(B10:B14)
ここでは、B10〜B14のセルに、先ほどの適当な数字を入力しています。
EXCELを起動させて、Alt+F11でVBAを起動させ、
その中に現時点で以下のようにプログラムしています。
Declare Function dll_double_square Lib "cdll.dll" _
(Dim d(0 To 4) As Double) As Double
ちなみに、これではエラーが出ています・・・
"cdll.dll"というファイルは、「WINNT」というフォルダの中の、
「system32」というフォルダに入れてあります。
この「cdll.dll」というファイルをコンパイルする前のプログラムが、以下となっています。
#include "cdll.h"
DLLIMPORT double
dll_double_square (double *d)
{
return d[0]+d[1]+d[2]+d[3]+d[4];
}
このプログラム(cdll.c)をコンパイルして、cdll.dllを作成しました。
また、cdll.c の中に、
#include "cdll.h"
というコマンドがあるのですが、
これが「cdll.h」をインクルードしているのか良くわかりません・・・
ただ、一応「cdll.c」と同じフォルダの中に、「cdll.h」も存在していて、
そのプログラムの中身は
#ifndef cdll_h_included
#define cdll_h_included
/*
* When building the DLL code, you should define BUILDING_DLL so that
* the variables/functions are exported correctly. When using the DLL,
* do NOT define BUILDING_DLL, and then the variables/functions will
* be imported correctly.
*
* You need to be using egcs-1.1.1 or newer.
*
* Building the DLL:
* - define BUILDING_DLL, which defines DLLIMPORT __attribute__((dllexport))
* Building the client code:
* - DO NOT define BUILDING_DLL, which defines DLLIMPORT to be one
* __attribute__((dllimport))
*/
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT double
dll_double_square (double *);
#endif /* cdll_h_included */
となっています。
以上が詳細な説明なのですが、何とか伝えられるように書いたつもりですが、
見にくい文になってしまい、申し訳ありません。
結論から言うと、エクセルに入力した数値を、「cdll.dll」に移し、
その結果をエクセルに表示させるようにしたいのですが・・・
どうかよろしくお願いいたします。
|
|