まにゅある


Sample1の説明


Sample0は簡単すぎるので、もう少し研究で使えそうなサンプルを作りました。

まず、Sample1をDownloadして下さい。[ Download ]
次に、Sample1を実行できるようにするために、[ 実行ファイルの作成手順 ] を参照して下さい。

Visual C++でDLLを作成したあとは、[ DLLの使い方 ] を参照して適切な場所に移動して下さい。
それから、Visual Basicによって作成されたSampleVB0.exeを実行して下さい。
実行例として、Visual BasicとVisual C++ DLLの位置付けを下に示しました。
まぁ、とりあえずSample1VB.exeを実行してみて下さい。

実行イメージ

デ−タの個数xを送ると、x個のデ−タが配列で返ってくるDLLです。
(デ−タの中味は単に偶数の正数を入れてます)
DLLの中に測定用プログラムを書いておけば、測定回数を指定して、返ってきたデ−タをリスト表示
というような使い方が出来ます。


☆★☆ プログラムの説明 ☆★☆

基本的にはSample0と同じ構成ですがプログラムを見やすくするために、DLLに関する宣言部分を
ヘッダ−ファイルや標準モジュ−ルに移してあります。

Sample0でもそうだったのですが、サンプルのDLLは全て引数をLong*で定義しています。
これはVBでDLLを呼び出す際、VBは引数として数値そのものではなく数値の入ったメモリアドレスを
送るので、それに合わせてDLL側(VC++)もポインタにしてデ−タを受け渡す必要があるからです。
つまりVBからaという変数を渡しても、実際には変数aがメモリ上のどこに格納されて
いるのかを示すアドレスが渡されているわけです。

変数の定義をByVal a As Longとして数値そのものを送ることも出来ますが、
そうすると配列を使ったやり取りが出来ません。
配列変数の受け渡しをする場合は、
配列が格納されているメモリ領域の先頭アドレスを指定しなければならないのですが
VBにはポインタが存在しません。そのためVBではdata(0)の様に0番目の配列のアドレスを指定します。
これで配列の先頭アドレスを渡したことになります。

また、引数を全てlong型にしているのはVBとVC++でint型の長さが異なるため
int型で定義すると正確な値を渡すことが出来なくなるためです。
そのためサンプルのDLLは引数を全てlong型に統一してあります。
int型は使わない様にしましょう。





トップページへ