Table of Contents |
---|
...
General description
Die The CIFX -API baut auf einer nativen API is based on a native C / C ++ Bibliothek auf. Bibliotheken für andere Entwicklungs- und/oder Laufzeit-Umgebungen gibt es nicht.
Um aus einer .NET-Applikation heraus auf solche, so genannten "nicht verwaltete" Bibliotheken bzw. Funktionen zuzugreifen, kann das so genannte P/Invoke-Framework implementiert werden.
Diese Application Note beschreibt die Herangehensweise bei der Verwendung des P/Invoke-Frameworks, im Hinblick auf die Nutzung der CIFX-API.
Dabei bezieht sich sie sich im wesentlichen auf die Umsetzungen in den Beispielen.library. There are no libraries for other development and / or runtime environments.
In order to access such "unmanaged" libraries or functions from a .NET application, the so-called P/Invoke framework can be implemented.
This application note describes the approach when using the P/Invoke framework with regard to the use of the CIFX API.
It essentially relates to the example implemetations.
Examples are available here:
Code Block |
---|
[DllImport("cifx32dll.dll", EntryPoint = "<native-function-name>")] private static extern UInt32 _myFunction( ... ); |
CifX-API
Handles
Wie auch bei der Verwendung der CIFX-API mit C/C++ ist die Handhabung verschiedener Handles erforderlich.
...
Vor Beenden der Applikatin, sollten die Handles über die entsprechenden Close-Funktionen wieder geschlossen werden.
x68 versus x64
Die Applikation bzw. der Wrapper kann im wesentlichen ohne Veränderungen sowohl für 64-, als auch für 32-Bit Systeme übersetzt werden.
In Abhängigkeit vom Zielsystem muss hierfür die korrekte DLL des CIFX-Treibers geladen werden. Im CIFX-Treiber werden beide DLL-Versionen bereitgestellt.
Performance & PLC-Funktionen
Grundästzlich sind die PLC-Funktionen hochperformante Applikationen mit hohen Timing-Anforderungen vorgesehen. Die Verwendung von .NET an sich ist für derartige Anforderungen weniger geeignet. Bereits Windows ist standardmäßig nicht echtzeitfähig und bietet keine Möglichkeit das Zeitverhalten eines Prozesses ausreichend zu beeinflussen. Mit der .NET-Runtime kommt eine weitere Software-Schicht hinzu, die das Timing-Verhalten noch weniger voraussehbar macht.
Für Applikationen in diesem Kontext ist die Verwendung von .NET im Allgemeinen nicht zu empfehlen. Dementsprechend werden die PLC-Funktionen der CifX-API im C#-Framwork nicht unterstützt.
Hilscher - C#-Paket
Hilscher stellt ein VisualStudio-Projekt bereit, dass das P/Invoke-Frame implementiert.
...
Info | ||
---|---|---|
| ||
Mit .NET bzw. VisualStudio ist das Verwenden sowohl von C#.NET-, als auch von VB.NET-Projekten innerhalb einer VisualStudio-Solution möglich. Hierfür kann einfach ein Projekt des entsprechenden Typs hinzugefügt werden: File → Add → New Project. |
C# .NET - Access Violation Exception
Ein häufig auftretendes Problem bei der Verwendung von C#.NET in Verbindung mit den CIFX-Bibliotheken, ist die „Access Violation Exception“. Sie entsteht bei Verwendung eines falschen Pointer-Typen bei einer 64-Bit Applikation:
...
Auf einer 64-bit Platform sieht die Ausgabe wie folgt aus:
SizeOf IntPtr is: 8"
Lösung
Im alten Code wurden einige Funktionsparameter als 32bit Parameter gesetzt.
...