000
06.08.2013, 10:11 Uhr
~ootobbyoo
Gast
|
Hallo Leute,
könnt mir mal wieder aus der Klemme helfen? Ich habe ein Programm in VBA und lasse eine Routine über eine C++-DLL berechnen. Ich habe da bisher immer einen 2D-Array übergeben, was auch super geklappt hat. Jetzt möchte ich dies aber mit einem 3D-Array machen und das klappt gar nicht.
Ich habe mal ein Minimal-Beispiel generiert:
C++: |
#include <windows.h> #include <iostream> #include <stdio.h>
using namespace std;
//zw = 3D-Array //n Größe des Arrays
extern "C" __declspec(dllexport) int __stdcall square(double zw[][5][2], double n) { int i,j;
for(i = 1; i <= n; i++){ for(j = 1; j <= n; j++){ zw[i][j][1] = 1; zw[i][j][2] = 2; } } return 0; }
|
in VBA sieht es dann so aus:
Visual Basic: |
Option Explicit
Declare Function square Lib "E:\C++\dll_datei_array\Release\dll_datei_array.dll" (ByVal zw As Long, ByVal n As Double) As Long
Sub test() Dim zw() As Double Dim i As Integer, n As Integer, j As Integer n = 5 ReDim zw(n, n, 2) As Double Call square(VarPtr(zw(0, 0, 0)), n) Cells.Clear For i = 1 To n: For j = 1 To n: Cells(i, j) = zw(i, j, 1): Next j: Next i For i = 1 To n: For j = 1 To n: Cells(i + 8, j) = zw(i, j, 2): Next j: Next i
End Sub
|
Leider kommt da völliger Müll raus:
1 1 1 1 0 2 2 2 2 0 1 1 1 0 0 2 2 2 0 0 1 1 1 0 0
und die zweite Ebene ist komplett leer:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mach ich mit den Zuweisungen etwas falsch? Hab schon viel rumprobiert, erkenne aber kein System dahinter... :mad:
Bin für jeden Ratschlag dankbar!!! :confused: |