- ベストアンサー
DLLの利用について
現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa as Integer, bb as Integer) Private Sub Command1_Click() Dim a(9) As Integer '1~9の値の代入先 Dim b As integer '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b 'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 引数で値を戻すには、参照渡しにしないといけないので、このソースのDLL側で算出した値(bb)を戻すためには、 _declspec(dllexport) void _stdcall Sum(short *aa, short *bb) とする必要があります。 また、DLL側に配列を渡す際は、先頭の要素を参照渡しにするので、 Sum a(0), b 'DLLでの計算 としてください。
その他の回答 (1)
- khazad-lefty
- ベストアンサー率44% (296/668)
あまりこのあたり詳しくはないのですが、 Web上のサンプルとかを見てると、Integer型の基本型は 明示的に値渡しで行っているような気がします。 なので、値渡しを行うためには、構造体を定義して、 それで受け渡しを行う必要があるのかもしれません。 あと、気になったのが、VC側での Sum(short *aa, short bb) ですが、これだとbbが値渡しになりませんか? Sum(short aa, short *bb) でもしかしたらうまくいくのかも。
お礼
御回答ありがとうございます。 なんとか解決することができました。 助かりました。
お礼
御回答ありがとうございます。 なんとか解決することができました。 助かりました。