• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC6.0で作成したDLLでVBからの配列を受け取る方法)

VC6.0で作成したDLLでVBからの配列を受け取る方法

このQ&Aのポイント
  • VC++でDLLを作成し、VBから呼び出しで配列を渡す方法について質問しています。通常変数での受け渡しは成功していますが、配列に変更すると受け渡しがうまくいかない状況です。お力をお貸しいただける方を探しています。
  • 質問者はVC++で作成したDLLをVBから呼び出し、配列を渡したいという問題に直面しています。通常変数での受け渡しは成功しており、配列に変更すると受け渡しが上手くいきません。問題の解決に関するアドバイスを求めています。
  • VC++で作成したDLLをVBから呼び出す際、配列を渡したい状況で問題が発生しています。通常変数では正常に受け渡しができることを確認しており、配列に変更すると値が正しく渡らなくなることがわかっています。解決策をお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • SSBBGLUV
  • ベストアンサー率47% (11/23)
回答No.1

VBの配列は管理領域などを含んでいますので、 そのままではうまく渡りません。 配列の先頭要素を参照渡しするとうまくいくと 思います。この場合、当然ですがC側では配列の 範囲を知ることが出来ませんので、その辺は引数で 管理してください。 ちなみに、ユーザ定義型の配列は各要素がメモリ内で 連続してないようなので、ユーザ定義型の場合は ご注意ください。 Declare Function fncTest Lib "fncTest.dll" (ByRef a As Long, ByVal n As Long) As Long フォーム Private Sub Test_Click() Dim i As Integer Dim hairetu(7) As Long Dim values As Variant For i = 0 To 7 hairetu(i) = i Next i values = fncTest(hairetu(0), 8) End Sub VC++6.0 fncTest.h fncTest_API int _stdcall fncTest(int*, int); fncTest.cpp fncTest_API int _stdcall fncTest(int* a, int n) { int sum; int i; for (i = 0; i < n; i++){ sum = a[i]; } return 0; }

pokepotto
質問者

お礼

どうもありがとうございました(^^)。 hairetu(0)を渡すことによって無事VCに値が渡りました。 なんとお礼をいえばいいのかわからないくらい 感謝感激です。 本当にありがとうございました m( _ _ )m

pokepotto
質問者

補足

VB側のDim values as variant values = fncTest(hairetu(0),8) の部分の戻り値はMSDNのサンプルを参考にして書きました。 まったく意味がないことがわかったので Dim values as integer values = fncTest(hairetu(0),8) で単純に戻り値を受け取るということでよかったと思います。 今後これを参考になされる方が混乱しないように 補足しておきますね。

その他の回答 (1)

  • SSBBGLUV
  • ベストアンサー率47% (11/23)
回答No.2

すいません。sumの初期化を忘れてました。 C側の int sum; を int sum = 0; に置き換えてください。

関連するQ&A