Array VB -> C++ Dll
-
Hallo,
ich rufe mit VB eine selbsgeschriebene C++ Funktion in einer Dll auf und übergebe ihr ein Array. Dieses Array ist eine Struktur, die auch ein Array beinhaltet.
Die Struktur sieht vereinfacht so aus:
Private Type Daten Zahl As Long Wert() As Werte End Type Private Type Werte Datum As String Wert As Single End Type
Der Aufruf der Funktion sieht so aus
Dim aDaten() As Daten Dim i As Integer ReDim aDaten(0) aDaten(0).Zahl = 1 ReDim aDaten(0).Wert(0) Hole_Daten(aDaten) For i = 0 To UBound(aDaten(0).Wert) Text1.Text = Text1.Text & aDaten(0).Wert(i).Datum & vbCrLf Next i
So nun kommt der C++ Teil.
Um das Array zu übergeben, wird ein SafeArray verwendet:int __stdcall Hole_Daten(LPSAFEARRAY FAR *aDaten) { long Indices[] = {1}; Daten DatenLocal; char Datum[11] = ""; long nIndexDate = 0; aDaten.Wert = new Werte[2]; rgIndices[0] = 0; strcpy(Datum, "14.06.2006"); // BAsic String erstellen char cUNIBufDatum[40] = ""; int nLen = MultiByteToWideChar(CP_ACP, 0, Datum, -1, NULL, 0); MultiByteToWideChar(CP_ACP, 0,(char*) &Datum, -1, (OLECHAR*) &cUNIBufDatum, nLen); DatenLocal.Wert[0].Datum = SysAllocString( (BSTR) cUNIBufDatum); DatenLocal.Werte[0].Wert = 1; int nLen = MultiByteToWideChar(CP_ACP, 0, Datum, -1, NULL, 0); MultiByteToWideChar(CP_ACP, 0,(char*) &Datum, -1, (OLECHAR*) &cUNIBufDatum, nLen); DatenLocal.Wert[1].Datum = SysAllocString( (BSTR) cUNIBufDatum); DatenLocal.Werte[1].Wert = 2; SafeArrayPutElement(*aDaten, rgIndices, &DatenLocal);
Wenn ich die Dll debugge, scheint alles zu Funktionieren ohne Fehler,
In VB wird die Funktion ohne Probleme aufgerufen, wenn ich mir den Wert im Array mir anzeigen will, sagt er "Index außerhalb des gültigen Bereichs".Mache ich irgentwas Falsch?
Wie muss ich die Werte in C++ dem Array übergeben?Danke für eure Antworten
-
Kenn mich in VB nicht aus, aber hast du dafür gesorgt, dass genügend Speicher im VB reserviert wird? Wenn sich die DLL-Funktion beendet wird AFAIK auch der von ihr genutzte Speicher ungültig.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.