Problem mit dc.getS16at(i) bei LibNoDave

Earny

Level-1
Beiträge
422
Reaktionspunkte
38
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hab ein Problem mit dem Lesen von Daten aus einem Datenbaustein mit dc.getS16at(i). In den DB1 habe ich zu Testzwecken 100 Integerwerte, beginnend bei DBW0 reingeschrieben. Ich habe kontrolliert, dass die Werte tasächlich drinstehen. Nun will ich mit dc.getS16at(i) die Werte herauslesen. Das klappt auch, bis auf die beiden ersten Werte?!

Code:
[COLOR=#0000ff]Private[/COLOR] [COLOR=#0000ff]Sub[/COLOR] btnWerteLesen_Click([COLOR=#0000ff]ByVal[/COLOR] sender [COLOR=#0000ff]As[/COLOR] System.Object, [COLOR=#0000ff]ByVal[/COLOR] e [COLOR=#0000ff]As[/COLOR] System.EventArgs) [COLOR=#0000ff]Handles[/COLOR] btnWerteLesen.Click
[COLOR=#0000ff]Dim[/COLOR] Zeit [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR]
[COLOR=#0000ff]If[/COLOR] livebit [COLOR=#0000ff]Then[/COLOR]
Zeit = GetTickCount
res = dc.readBytes(libnodave.daveDB, 1, 0, 200, buffy)
[COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]If[/COLOR]
txtLesen.Text = GetTickCount - Zeit
[COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]Sub[/COLOR]
 
[COLOR=#0000ff]Private[/COLOR] [COLOR=#0000ff]Sub[/COLOR] btnExcelSchreiben_Click([COLOR=#0000ff]ByVal[/COLOR] sender [COLOR=#0000ff]As[/COLOR] System.Object, 
[COLOR=#0000ff]ByVal[/COLOR] e [COLOR=#0000ff]As[/COLOR] System.EventArgs) [COLOR=#0000ff]Handles[/COLOR] btnExcelSchreiben.Click
[COLOR=#0000ff]Dim[/COLOR] i [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], Zeit [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR]
Exc.Worksheets(1).Cells(1, 1).value = [COLOR=#800000]"Nummer"[/COLOR]
Exc.Worksheets(1).Cells(1, 2).value = [COLOR=#800000]"Wert"[/COLOR]
Zeit = GetTickCount
[COLOR=#0000ff]For[/COLOR] i = 0 [COLOR=#0000ff]To[/COLOR] 99
Exc.Worksheets(1).Cells(i + 2, 1).value = i + 1
exc.Worksheets(1).Cells(i + 2, 2).value = dc.getS16At(i * 2)
[COLOR=#0000ff]Next[/COLOR]
txtExcel.Text = GetTickCount - Zeit
Exc = [COLOR=#0000ff]Nothing[/COLOR]
[COLOR=#0000ff]End[/COLOR] [COLOR=#0000ff]Sub[/COLOR]

buffy ist formweit gültig deklariert mit "Dim buffy(199) as Byte".
Ich schreibe die 100 Integerwerte in eine Excel-Tabelle. Dabei stelle ich fest, dass die beiden ersten Werte nicht stimmen.
Ich habe es alternativ dazu mal mit davegetS16from(buffy(i*2)) versucht. Damit klappt es.

Gruß
Earny
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo argv,
die Speichergröße reicht. Wenn man bei der Deklaration angibt

Dim buffy(199) of Byte,

so ist ein Array mit 200 Elementen deklariert, weil mit Array-Index 0 losgezählt wird. Es gibt möglicherweise bei VB2005 die Anweisung

Option Base 1

Dann zählen alle Arrays ab dem Array-Index 1. Die "Option Base 1" ist aber nicht aktiviert.

Gruß
Earny
 
Hallo,

wenn man die Zeile:

exc.Worksheets(1).Cells(i + 2, 2).value = dc.getS16At(i * 2)

ersetzt durch

exc.Worksheets(1).Cells(i + 2, 2).value = dc.getS16At(buffy(i * 2))


funktioniert es.

Ich muss wohl mal die Beschreibung zu LibNoDave etwas genauer nachlesen.

Gruß
Earny
 
Zurück
Oben