# Libnodave mit VB2005



## Earny (25 Februar 2010)

Hallo,
ich habe ein Problem mit daveReadManyBytes. Beim Versuch, mit dieser Funktion den DB1 auszulesen, kommt es zu einem Fehler.
Benutze ich daveReadBytes, dann klappt das, wenn z.B. nur 100 Bytes gelesen werden. Ich habe in einem Forums-Beitrag aus dem Jahr 2005 gelesen, dass die Funktion fälschlicherweise mal mit "daveManyReadBytes" bezeichnet wurde. So war es auch in meinem Modul. Deshalb habe ich sie in daveReadManyBytes umbenannt. Das nützt aber auch nichts. Nur die Fehlermeldung ändert sich.

Diese Aufruf erzeugt den Fehler:

```
res = daveReadManyBytes(dc, daveDB, 1, 0, 100, Buffer(0))
```
Dazu gehört die Funktionsdeklaration:

```
[COLOR=#0000ff]Public[/COLOR] [COLOR=#0000ff]Declare[/COLOR] [COLOR=#0000ff]Function[/COLOR] daveReadManyBytes [COLOR=#0000ff]Lib[/COLOR] [COLOR=#800000]"libnodave.dll"[/COLOR] ([COLOR=#0000ff]ByVal[/COLOR] dc [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] area [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] areaNumber [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] start [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] numBytes [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByRef[/COLOR] buffer [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR]) [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR]
```
 
Ich lese aus dem DB1 die ersten 100 Bytes. Die Deklaration für den Buffer lautet: Dim Buffer(9999) as Byte.


Gruß
Earny


----------



## MW (25 Februar 2010)

probier es mal damit


```
res = daveReadManyBytes(dc, daveDB, 1, 0, 100, Buffer)
```
und in der Deklaration damit


```
[COLOR=#0000ff]Public[/COLOR] [COLOR=#0000ff]Declare[/COLOR] [COLOR=#0000ff]Function[/COLOR] daveReadManyBytes [COLOR=#0000ff]Lib[/COLOR] [COLOR=#800000]"libnodave.dll"[/COLOR] ([COLOR=#0000ff]ByVal[/COLOR] dc [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] area [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] areaNumber [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] start [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByVal[/COLOR] numBytes [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR], [COLOR=#0000ff]ByRef[/COLOR] buffer() [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]byte[/COLOR]) [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]Integer[/COLOR]
```

wobei ich mir jetzt nicht sicher bin, ob nicht auch deine Deklaration "ByVal dc As Integer" falsch sein könnte.


----------



## Earny (26 Februar 2010)

Hallo MW,

ich habe den Fehler dank Deiner Hilfe gefunden. In der Deklaration muss es beim letzten Parameter lauten "ByRef Buffer as Byte". Ich hatte da "ByRef Buffer as Integer" stehen. Jetzt funktioniert das.

Ich hätte da nochmal eine grundsätzliche Frage zur Wrapper-dll (libnodave.net.dll). Ich arbeite mit VB2005 (gehört ja auch zur VB.Net-Gruppe) und verzichte jetzt ganz auf den Wrapper. Ich weiß ehrlich gesagt nicht, wozu der überhaupt gut sein soll. Ich will nicht undankbar erscheinen und nochmal betonen, dass ich libnodave schon als tolles Werkzeug ansehe, um beispielsweise aus einer Hochsprache heraus kostenlos auf eine S7 zugreifen zu können. Oder bringt der Wrapper noch Vorteile mit sich, die ich noch nicht entdeckt habe?
Wenn ich auf den Wrapper verzichte, spreche ich die Konstanten, Prozeduren und Funktionen von libnodave in einem Modul oder in einer Klasse an, und das funktioniert problemlos (von Anfängerproblemen abgesehen). Ich muss nur den alten Modul12 nehmen und den Datentyp long (= 32-Bit-Integer bei VB6.0) umstellen auf Integer (= 32-Bit-Integer bei VB.Net) und sonst noch ein paar kleine Änderungen vornehmen. Ich habe aber jederzeit den Überblick, welche Konstanten, Prozeduren und Funktionen libnodave zur Verfügung stellt.


Gruß
Earny


----------



## Ralle (15 März 2010)

Guckst du hier: http://www.sps-forum.de/showthread.php?t=33647

Gehört auch nicht in diesen Thread, also nächstes Mal bitte einen neuen aufmachen oder zuerst besser im Forum suchen!


----------

