実現したいこと
値の入力出力をVBA側の担当
計算をDLL(C++)側の担当
とするようなプログラムを作成する上で以下の内容を知りたいです。
①VBAよりDLL(C++)への多次元配列の値渡し(3次元配列まで)
②DLL(C++)からの複数の戻り値の取得
使用ソフト
Excel 2019
Visual Studio 2017
現在までに出来ていること
1次元配列の値渡し
ソースコード(VBA側)
Declare Function T1 Lib "●●.dll" (ByVal a As Long, ByRef b As Long) As Long
Dim a As Long
Dim b(2) As Long
Public Sub TEST1()
a = 1
b(0) = 400
b(1) = 5000
b(2) = 60
'出力されるのは461
Debug.Print P1(a, b(0))
End Sub
ソースコード(DLL(C++)側)
.cpp
int __stdcall T1(int a, int b[])
{
int x;
x = 0;
x = a + b[0] + b[2];
return x;
}
.def
EXPORTS
T1
こんな感じなことが出来れば・・・・
DLL(C++)側
//宣言のやり方が正しいかは不明
int x[3];
x = 0;
x[0] = b[0][0][0] + b[0][0][1];
x[1] = a + b[0][1][0] + b[0][1][1];
x[2] = b[1][0][0] + b[1][0][1];
x[3] = a + b[1][1][0] + b[1][1][1];
//複数の計算結果を持って帰る(ここは多次元配列は求めていないため、1次配列かその他の方法)
return x[3];
VBA側
Dim b(1,1,1) As Long
a = 1000
b(0,0,0) = 0
b(0,0,1) = 1
b(0,1,0) = 2
b(0,1,1) = 3
b(1,0,0) = 4
b(1,0,1) = 5
b(1,1,0) = 6
b(1,1,1) = 7
上記の値を持たせてDLLを呼び出すと
4種類の計算結果が返ってくる
