Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Brauche dringend Hilfe beim Einbinden einer *.so Bibliothek.
Ich möchte eine Funktion aus der Bibliothek aufrufen, die Definition ist folgende:
DWORD Statistics(HANDLE hHandle, TPDIAG *diag)
dabei ist TPDIAG eine Struktur mit folgendem Aufbau:
typedef struct
{
WORD wType;
DWORD dwBase;
WORD wIrqLevel;
DWORD dwReadCounter;
DWORD dwWriteCounter;
DWORD dwIRQcounter;
DWORD dwErrorCounter;
WORD wErrorFlag;
int nLastError;
int nOpenPaths;
char szVersionString[VERSIONSTRING_LEN];
} TPDIAG;
Ich habe mir einen Cluster erstellt mit obigem Inhalt.
Die Frage ist jetzt aber wie der Parameter in der Call Library Function zugewiesen werden muss.
Welchen Typ muss ich dafür vergeben und welches Datenformat?
Außerdem ist mir das mit dem String noch ein bisschen schleierhaft
Bin ein absoluter Anfänger was das Einbinden von externem Code angeht, also bitte ich hier um Hilfe.
Also jetzt bin ich schwer verwirrt. Einerseits sprichst Du von DLL aber dann von .so. Der C Code verwendet deutlich Windows Datentypen.
DLL ist Windows, .so ist die Fileendung für Linux shared libraries, Datentypen von Windows????
Irgendwie sieht das alles komisch aus.
Zu Deinem Problem:
Der Cluster ist Flat. Das heisst er enthält keine Pointer. Das ist schon mal gut. Die einzige Schwierigkeit ist der String am Ende aber der ist fixed size und kann deshalb in LabVIEW durch eine Cluster von VERSIONSTRING_LEN uint8 Elementen nachgebildet werden. Nun konfigurierst Du Den Parameter als Adapt to Typel, et voila.
Habe sowohl eine *.dll für die LabVIEW Entwicklung unter Windows als auch eine *.so für die LabVIEW Entwicklung unter Linux.
Momentan arbeite ich in der Linuxversion LabvIEW 2009.
Als Prototyp in dem Call Library Function habe ich jetzt folgendes:
Im Anhang ist ein Screenshot ds Clusters den ich erstellt habe.
Sobald ich die Funktion aufrufe schließt sich das komplette LabVIEW ohne irgendeinen Fehler.
Ist der Cluster soweit erstmal richtig?
Nein int ist ausser auf alten Windows 3.1 Systemen eindeutig ein 32 bit Integer. Und wie gross VERSIONSTRING_LEN ist weiss ich nicht aber wenn das mehr als 4 ist dann ist es auch einfach falsch.