# LibNoDave unter VB.Net ohne libnodave.net.dll



## Earny (8 März 2010)

Hallo,

ich hätte da mal eine grundsätzliche Frage zum Einsatz der libnodave.net.dll.
Ich hatte bisher auch stets die libnodave.net.dll (Wrapper-dll) eingesetzt. Mittlerweile habe ich aber mehrere Projekte ohne den Wrapper umgesetzt und bin mit dem Resultat zufrieden.
Ich habe jetzt in meinen VB-Projekten stets meine neu erstellte Klasse mit Namen LibnodaveClass.vb eingefügt. Darin enthalten sind sämtliche Libnodave-Konstanten, -Prozeduren, und -Funktionen aus dem alten Modul12 des VB6.0-Excel-Libnodave-Beispiels. Man muss nur den alten Long-Datentyp von VB6.0 durch den Integer-Datentyp von VB.Net ersetzen (beides ist 32 Bit Integer). Gelegentlich muss noch der letzte Parameter von ByVal (Wertparameter, ohne Rückgabe) auf ByRef (Zeigerparameter mit Rückgabe) umgestellt werden. 
Über den Klassennamen kann ich jetzt problemlos auf alle Methoden von Libnodave zugreifen. Ich brauche also nicht mehr den Wrapper. Die Zugriffe sehen ähnlich aus, wie bei VB6.0, nur der Klassenname ist vorangestellt. 
Außerdem kann ich jetzt jederzeit in der Klasse nachsehen, welche Konstanten, Prozeduren und Funktionen Libnodave besitzt. Auch der Verbindungssaufbau und -abbau sehen dann aus wie bei VB6.0.

Oder gibt es doch gute Gründe, die für den Einsatz der libnodave.net.dll sprechen, und ich habe die möglicherweise noch nicht entdeckt?


Gruß
Earny


----------



## Rainer Hönle (9 März 2010)

Im Prinzip schreibst Du dabei einen eigenen Wrapper. Siehst Du im originalen keine Konstanten etc.?


----------



## Earny (9 März 2010)

Hallo Rainer,
ja ist wohl auch so eine Art Wrapper. Allerdings kann ich jederzeit in meiner Klasse nachsehen welche Konstanten, Prozeduren und Funktionen LibNoDave zur Verfügung stellt. Ich habe ja, wie gesagt den alten Modul12 zu meiner neuen Klasse gemacht und in dem Modul12 stehen ja relativ ausführliche Kommentare drin. Für die libnodave.net.dll habe ich die Erklärungen noch nicht gefunden. Natürlich erhält man durch Eingabe eines Punktes hinter dem Objekt, alle programmierbaren Methoden und Eigenschaften angeboten. Das ist bei meiner Version im Prinzip auch so.

Erstaunlicherweise sind aber z.B. die Routinen für den Verbindungsaufbau zumindest optisch stark unterschiedlich aus, obwohl ja prinzipell das gleiche geschehen muss. Da muss die libnodave.net.dll doch eine maßgebliche Rolle spielen:

Verbindungsaufbau für ISO_TCP, wenn libnodave.net.dll vorhanden:

```
[COLOR=#0000ff]Dim[/COLOR] IP [COLOR=#0000ff]As[/COLOR] [COLOR=#0000ff]String[/COLOR]
IP = cbxIP.Text
fds.rfd = libnodave.openSocket(102, IP) [COLOR=#008000]'Portstatus - lesen[/COLOR]
fds.wfd = fds.rfd [COLOR=#008000]'Portstatus schreiben = Portstatus - lesen[/COLOR]
di = [COLOR=#0000ff]New[/COLOR] libnodave.daveInterface(fds, [COLOR=#800000]"Mein Interface"[/COLOR], localMPI, _
libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
di.setTimeout(1000000)
res = di.initAdapter
[COLOR=#0000ff]If[/COLOR] res = 0 [COLOR=#0000ff]Then[/COLOR] [COLOR=#008000]'initAdapter OK[/COLOR]
[COLOR=#008000]' Rack und Slot spielen keine Rolle bei diesem Protokoll[/COLOR]
dc = [COLOR=#0000ff]New[/COLOR] libnodave.daveConnection(di, 0, 0, 2)
res = dc.connectPLC()
...
...
```
 
Verbindungsaufbau ISO_TCP ohne libnodave.net.dll:

```
IP = cbxIP.Text
ph = Libno.openSocket(102, IP)
[COLOR=#0000ff]If[/COLOR] (ph > 0) [COLOR=#0000ff]Then[/COLOR]
di = Libno.daveNewInterface(ph, ph, [COLOR=#800000]"IF1"[/COLOR], 0, Libno.daveProtoISOTCP, Libno.daveSpeed187k)
res = Libno.daveInitAdapter(di)
[COLOR=#0000ff]If[/COLOR] res = 0 [COLOR=#0000ff]Then[/COLOR]
dc = Libno.daveNewConnection(di, 0, 0, 2)
res = Libno.daveConnectPLC(dc)
```
 

Gruß
Earny


----------

