Autor Beitrag
holger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

W2K pro, XP pro
Delphi 6, Delphi 2007
BeitragVerfasst: Di 29.07.14 21:10 
Hallo,

ich versuche wieder mal eine Komponente zu verwenden - „Libnodave“.

( libnodave.sourceforge.net/ )

Damit kann man auf eine Siemens-SPS zugreifen.

Leider habe ich keine Ahnung, wie man mit Komponenten umgeht.
Ich verwende übrigens CodeGear Delphi 2007.


Zum einen weiß ich leider nicht, wie ich eine Komponente installieren kann.


Zum anderen habe ich versucht einfach die Unit NoDaveComponent in mein Programm einzubauen. Wenn ich mein Programm kompilieren will, kommt aber die Meldung

[DCC Fehler] NoDaveComponent.pas(53): F1026 Datei nicht gefunden: 'NoDave.dcu'


Was muss ich machen um die Komponente verwenden zu können?

Vielen Dank im Voraus
Holger


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 29.07.2014 um 22:43
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 30.07.14 01:22 
Installieren musst du Komponenten typischerweise nicht, wenn du sie nicht unbedingt in der IDE haben willst.
Die faule Variante ist, einfach alle Dateien in die Delphi-Library zu schieben (bei Delphi 2005 ist das C:\Programme\Borland\BDS\3.0\lib). Dann sind sie genau wie die anderen Units direkt verfügbar.
Die sauberere Variante ist, sie neben das Programm oder z.B. in einen Ordner daneben zu legen. Dann musst du aber alle pas-Dateien, die transitiv verwendet werden, dem Projekt hinzufügen. Deine Fehlerbeschreibung lässt vermuten, dass du die Unit "NoDave.pas" nicht dem Projekt hinzugefügt hast. Delphi weiß dann nicht, wo diese zu finden ist.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 30.07.14 09:10 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Die faule Variante ist, einfach alle Dateien in die Delphi-Library zu schieben (bei Delphi 2005 ist das C:\Programme\Borland\BDS\3.0\lib). Dann sind sie genau wie die anderen Units direkt verfügbar.
Nur wenn das Windows nicht sauber konfiguriert ist. Denn nur dann können die kompilierten Units dort auch abgelegt werden.

Nebenbei kann man ab Windows 8 Dateien auch nicht mehr einfach im Windows Explorer in den Ordner einfügen, da die Systemordner nun (endlich!) besser geschützt werden vor solchen Frickeleien.

Die einzige saubere Lösung ist diese an eine andere Stelle zu legen und einzubinden. Dem Projekt hinzufügen ist wiederum auch nicht wirklich sauber, aber es funktioniert und ist einfach. Deshalb macht es hier vermutlich am meisten Sinn.

Sauber ist die Dateien in einen Pfad für die Komponenten zu legen und diesen dem Bibliothekspfad hinzuzufügen. Und die sauberste Variante ist die Units in einen Komponentenordner sauber sortiert zu schieben, ein Package anzulegen, in das man alle diese Units packt (von allen verwendeten Komponenten, die man so einbinden möchte), einen DCU-Ausgabepfad für das Package festlegt und nur diesen einen Pfad in den Bibliothekspfad hinzufügt. Die Verzeichnisse mit den Quelltexten der Units gehören in den Suchpfad.

Auf diese Weise werden die Units nicht ständig neu kompiliert, aber Delphi findet die Quelltexte.
holger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

W2K pro, XP pro
Delphi 6, Delphi 2007
BeitragVerfasst: Mi 30.07.14 17:59 
Vielen Dank für eure schnellen Antworten.

Ihr habt mich einen Schritt weiter gebracht.

Man muss sich bei Libnodave alles ein bisschen zusammen suchen:

[contributions]
[DelphiComponent] <-- (nodavecomponent.pas ...)
[doc]
[Dot.NET]
[Excel And VB]
[pascal] <-- (nodave.pas ...)
[PERL]
[simplified]
[usb2mpi-Linux-2.6]
[win] <-- (libnodave.dll)

Beste Grüße
Holger
holger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

W2K pro, XP pro
Delphi 6, Delphi 2007
BeitragVerfasst: Mo 29.12.14 18:16 
Nach dem ich ein halbes Jahr gar nix an diesem Projekt gemacht habe versuche ich es jetzt noch mal.

Zitat:
Die einzige saubere Lösung ist diese an eine andere Stelle zu legen und einzubinden. Dem Projekt hinzufügen ist wiederum auch nicht wirklich sauber, aber es funktioniert und ist einfach. Deshalb macht es hier vermutlich am meisten Sinn.


Ja - so etwa habe ich das gemacht.

Das Programm lässt sich jetzt kompilieren und starten.
Aber gleich nach dem Start kommt es zu einem Zugriffsfehler

Erste Gelegenheit für Exception bei $7C812FD3. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00466D94 in Modul 'SPSControl.exe'. Lesen von Adresse 00000030'. Prozess SPSControl.exe (5272)

Dieser Fehler tritt beim Ansprechen der Variable FActive auf. Nach Auskommentieren tritt der Fehler bei einer anderen F….-Variable auf.

Definition:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
//The Class TNoDave encapsulates the access to the libnodave.dll of Thomas Hergenhahn.
//All the settings for the communication are available in the properties of TNoDave.
  TNoDave = class(TComponent)
  private
    FActive: Boolean;
    .
    .


Für mich sieht das so aus, als würde die libnodave.dll nicht richtig eingebunden werden.
Ich habe die DLL in mein Ausgabeverzeichnis kopiert. Genau dort, wo die neueste EXE landet.

Muss ich den Pfad zur DLL auch irgendwo angeben? Wo oder wie geht das?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.12.14 20:19 
Du hast das Objekt TNoDave vermutlich nicht erstellt (TNoDave.Create usw., wenn es nicht als Komponente auf dem Formular liegt).

"Adresse 00000030" ist die Adresse des Objektes (Null, da nicht erstellt) plus der Position des Felds FActive. ;-)
holger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

W2K pro, XP pro
Delphi 6, Delphi 2007
BeitragVerfasst: Fr 02.01.15 21:11 
ausblenden Quelltext
1:
2:
3:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
+  Ich wünsche allen hier im Forum ein frohes, gesundes neues Jahr 2015  +  
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Juhu - es funktioniert.

Ich kann Daten senden und empfangen.

Vielen Dank für eure Hilfe.
Holger