LibNodave 64 Bit.

Oh, das war aber tricky. Was nutzt du denn für einen Compiler?

In der windows.h die ich im GCC unter Windows verwende wird wenn _WIN32_WINNT > 0x0400 ist die winsock2.h eingebunden.
Den Wert muss man natürlich vorher passend setzen, wird auch schnell mal vergessen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nehm mal an, dass die library nur für C/++ Anwendungen vorgesehen ist, richtig?
Gibt es auch eine entsprechende 64 Bit version für .NET anwendungen?
Bräuchte eine 64Bit Version für ein Projekt in Vb.net
 
Ich nehm mal an, dass die library nur für C/++ Anwendungen vorgesehen ist, richtig?
Gibt es auch eine entsprechende 64 Bit version für .NET anwendungen?
Bräuchte eine 64Bit Version für ein Projekt in Vb.net

Nö, es ist zwar eine C DLL aber Ich verwende Sie auch mit C#! In meiner Bibliothek ist auch ein VB.NET Beispiel dabei!
 
Hmm,
beim erstellen eines Verweises im Projekt kommt allerdings die Fehlermeldung, dass die DLL keine gültige COM oder Assembley Komponente ist.
libnodave_jfkmod64.dll ist doch die korrekte?

Danke für die Antwort :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stehe vor dem selben problem.
Mein 64Bit System bringt den Fehler BadImageException bei lidnodave.openSocket();
Kann die 64bit.dll von Herrn Kühner auch nicht einbinden. Schade
 
Stehe vor dem selben problem.
Mein 64Bit System bringt den Fehler BadImageException bei lidnodave.openSocket();
Kann die 64bit.dll von Herrn Kühner auch nicht einbinden. Schade

Wenn du dein Programm als 64/32 Bit compilierst brauchst du halt die dementsprechende Dll. Ein als 32 Bit compiliertes Programm braucht auch unter 64 Bit die 32er DLL! Meine ConnectionLib wählt automatisch die richtige...
 
Hallo,
habe mit Umstellung auf VS2013 erstmals versucht ne 64er App zu schreiben ... krieg jetzt aber beim Erstellen eines Verweises im Projekt die Fehlermeldung, dass die libnodave_jfkmods (32er und 64er) keine gültige COMs oder Assemblies Komponenten sind.
Danke für Eure Anschubhilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
habe mit Umstellung auf VS2013 erstmals versucht ne 64er App zu schreiben ... krieg jetzt aber beim Erstellen eines Verweises im Projekt die Fehlermeldung, dass die libnodave_jfkmods (32er und 64er) keine gültige COMs oder Assemblies Komponenten sind.
Danke für Eure Anschubhilfe.

Dieses Problem hast du aber auch bei einem 32 Bit Projekt, da dies C Dlls und keine DotNet Dlls sind!
Probiers am besten mal damit: http://www.sps-forum.de/hochsprache...en-aus-s7-mit-dotnetsiemensplctoolboxlib.html
 
Hallo Jochen,
erstmal Danke für Deine coole Toolbox samt Unterstützung.
Steh auf dem Schlauch: Unter WinXP funktioniert die S7DLL Verbindung, Auswahl der PG/PC Schnittstelle funktioniert.
Gleiches PG mit Win7/64 funktioniert nicht.
Hast Du nen Tip?
Danke und GrussPLCConLibWin7.jpgPLCConLibWinXP.jpg
Eugen
 
Hallo Jochen,
erstmal Danke für Deine coole Toolbox samt Unterstützung.
Steh auf dem Schlauch: Unter WinXP funktioniert die S7DLL Verbindung, Auswahl der PG/PC Schnittstelle funktioniert.
Gleiches PG mit Win7/64 funktioniert nicht.
Hast Du nen Tip?
Danke und GrussAnhang anzeigen 23843Anhang anzeigen 23844
Eugen

Unterm Step7 für 64 Bit Windows stehen die S7Online Schnitstellen nicht mehr in der Registry sondern woanderst, glaub in nem Config File auf der festplatte! Hab Ich aber noch nicht angepasst! Und auch ob die S7Onlinx Dll mit 64 Bit geht... Kein Plan...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, falls jemand libnodave als 64 Bit Version braucht, in meiner ConnectionLibrary ist nun eine funktionierende Version mit drin (http://siemensplctoolboxlib.codeplex.com/)
Ich habe mir die libnodave_jfkmod64.dll von hier heruntergeladen und versuche nun, unter Windows 7 Professional 64-Bit mit Excel 14.0 (64-Bit) Daten aus S7-300 via Ethernet auszulesen.
Meine Excel-Anwendung funktioniert unter Windows 7 64-Bit mit Excel 32-Bit mit original libnodave.dll einwandfrei.
Ich habe die für Excel-64-Bit-VBA nötigen Programmanpassungen vorgenommen, so sieht mein VBA-Code auszugsweise aus:
Code:
#If Win64 Then  [COLOR="#006400"]'*** Declarations for Excel 64-Bit with Libnodave 64-Bit[/COLOR]
  Private Declare PtrSafe Function openSocket Lib "libnodave_jfkmod64.dll" (ByVal port As Long, ByVal peer As String) As LongPtr
  Private Declare PtrSafe Function daveNewInterface Lib "libnodave_jfkmod64.dll" (ByVal fd1 As LongPtr, ByVal fd2 As LongPtr, ByVal name As String, ByVal localMPI As Long, ByVal protocol As Long, ByVal speed As Long) As LongPtr
  Private Declare PtrSafe Function daveInitAdapter Lib "libnodave_jfkmod64.dll" (ByVal di As LongPtr) As Long
  Private Declare PtrSafe Function daveNewConnection Lib "libnodave_jfkmod64.dll" (ByVal di As LongPtr, ByVal mpi As Long, ByVal Rack As Long, ByVal slot As Long) As LongPtr
  Private Declare PtrSafe Function daveConnectPLC Lib "libnodave_jfkmod64.dll" (ByVal dc As LongPtr) As Long
'...
#Else  [COLOR="#006400"]'Not Win64 *** Declarations for Excel 32-Bit with Libnodave 32-Bit[/COLOR]
'...
#End If

Sub readFromFAFM()
Dim ph As LongPtr, di As LongPtr, dc As LongPtr
'...

Call daveSetDebug(daveDebugAll)

Peer$ = "192.168.196.196"
ph = openSocket(102, Peer$)
If (ph > 0) Then
    IFname$ = "IF1"
    [COLOR="#FF0000"]di = daveNewInterface(ph, ph, IFname$, 0, daveProtoISOTCP, daveSpeed187k)[/COLOR]
    res = daveInitAdapter(di)
    If res = 0 Then
        dc = daveNewConnection(di, MpiPpi, Rack, Slot)
        res = daveConnectPLC(dc)

Die DLL-Funktionen openSocket(..), closePort(..) und closeSocket(..) funktionieren einwandfrei, doch bei daveNewInterface(..) schmiert mir das Excel immer ab (auch wenn ich statt IFname$ direkt "IF1" in den Aufruf schreibe):
Code:
Microsoft Excel funktioniert nicht mehr

Problemsignatur:
  Problemereignisname:     APPCRASH
  Anwendungsname:          EXCEL.EXE
  Anwendungsversion:       14.0.7160.5000
  Anwendungszeitstempel:   55fc2723
  Fehlermodulname:         libnodave_jfkmod64.dll
  Fehlermodulversion:      0.0.0.0
  Fehlermodulzeitstempel:  5318b692
  Ausnahmecode:            c0000005
  Ausnahmeoffset:          000000000001aeb0
  Betriebsystemversion:    6.1.7601.2.1.0.256.48
  Gebietsschema-ID:        1031

1) Was läuft da verkehrt? Wie kann ich ohne C-Compiler und Debugger rauskriegen, wo das Problem liegt?
2) Gibt es schon irgendwo fertig die VBA-Deklarationen der DLL-Funktionen für 64-Bit? Kann man die Deklarationen vielleicht sogar irgendwie direkt aus der DLL importieren?

Harald
 
Warum gibts den ersten Parameter "ph" 2 mal???
Hallo Jochen,

das ist im original Libnodave im VBA-Beispiel "Excel And VB/Modul12.bas" so deklariert und funktioniert bei mir auch einwandfrei mit Excel 32-Bit. Ich habe nur die Deklaration der HANDLE- und Pointer-Parameter für Excel-64-Bit angepasst.

Siehe auch hier https://github.com/netdata/libnodave/blob/master/Excel And VB/Modul12.bas
Zeile 164
Code:
Private Declare Function daveNewInterface Lib "libnodave.dll" (ByVal fd1 As Long, ByVal fd2 As Long, ByVal name As String, ByVal localMPI As Long, ByVal protocol As Long, ByVal speed As Long) As Long

Ich weiß nicht, vielleicht kann man mit VBA keine Struktur an eine externe DLL übergeben und die beiden Port-HANDLE der Struktur _daveOSserialType werden deshalb einzeln übergeben?

Harald
 
Ok, kann schon sein das du den Parameter 2 mal übergibst, da der Interne Typ in LibNoDave ja ein Struct mit 2 Handels ist!

Kann es sein, das longs in VBA 64 Bit trotzdem nur 32 Bit groß sind? ABer alle Handles in libnodave 64 sind nun 64 Bit groß? Du solltest die bas Datei so anpassen das statts "long" für einen zeiger "LongPtr" verwendet wird! Dieser Typ hat in 32 und 64 Bit die richtige größe! (https://msdn.microsoft.com/de-de/library/office/gg264421.aspx)
 
Zurück
Oben