3D-Array von VBA über C++ DLL und zurück
-
Hallo Leute,
nach ihr mir hier http://www.c-plusplus.net/forum/p2341453#2341453 so gut weiter geholfen habt, müsst 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:
#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:
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 0und 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 0Mach ich mit den Zuweisungen etwas falsch? Hab schon viel rumprobiert, erkenne aber kein System dahinter...
Bin für jeden Ratschlag dankbar!!!
-
Niemand eine Idee???
Falsche Rubrik?
-
Hallo,
keine Ahnung wie VBA mehrdimensionale Array anordnet.
Eventuell helfen die Szenarios 2. oder 3. hier weiter
http://support.microsoft.com/kb/207931/en-us
-
Hi nn,
auf die Seite bin ich auch schon gestoßen. Die dort gezeigen Beispiele beziehen sich aber auch nur auf 2D-Arrays, was bei mir gut funktioniert. Die Frage ist, warum 2D läuft, 3D aber nicht?
Danke für deine Hilfe!
-
Die Versionen mit Safearray sollten auch mit mehr Dimensionen arbeiten.
Mehr dazu erfährst du eventuell, wenn du oben im VC- oder WinAPI-Forum fragst, da gibt es eventuell Leute, die sich damit auskennen. Ob Du dann aber noch mit dem gcc arbeiten kannst, kann ich nicht sagen.
-
Eigentlich sollte es auch wie oben beschrieben gehen. Mit 2D klappt es ja problemlos...
Ohne gcc ist leider keine Option. Es muss auch nach meiner Art irgendwie gehen...
Trotzdem Danke.
-
ootobbyoo schrieb:
Mit 2D klappt es ja problemlos...
Nur wer sagt, dass das für höhere Dimensionen auch gilt ? Eventuell werden diese Arrays VBA intern dann als COM-Objekte dargestellt, dann sind es Safearrays.