09.01.2021, 08:59
(Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2021 09:00 von Martin.Henz.)
|
Martin.Henz
LVF-Team
Beiträge: 429
Registriert seit: Jan 2005
2.5.1 bis 20
1992
kA
74363
Deutschland
|
RE: C-String-Zeiger Format
Was in exbuffer steht, das hattest du ganz am Anfang doch beschrieben - so ganz verstehe ich nicht, womit du nun nicht klar kommst.
Zitat:typedef struct
{
unsigned char address[256];
ULONG timeout;
ULONG portno;
ULONG encryption_type;
unsigned char encryption_password[32];
} DAPI_OPENMODULEEX_STRUCT;
Du musst jetzt einen String zusammenbasteln der diese Daten in der Reihenfolge enthält wie es im Header-File angegeben ist.
|
|
|
09.01.2021, 10:51
(Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2021 10:54 von hansi9990.)
|
|
|
09.01.2021, 13:43
|
Martin.Henz
LVF-Team
Beiträge: 429
Registriert seit: Jan 2005
2.5.1 bis 20
1992
kA
74363
Deutschland
|
RE: C-String-Zeiger Format
Hallo Hansi,
so ganz ohne irgend etwas ist das etwas schwierig.
Was mir aber auffällt ist, dass es
(a) Der Hersteller gar nicht beschreibt, was da als letzter Parameter eigentlich übergeben wird.
(b) Es auch die Funktion DapiOpenModule gibt, bei der man vermutlich nur zuvor das DELIBConfiguration Utility verwenden muss um IP Nummer usw. festzulegen.
Hast du (b) schon einmal probiert...
Bezüglich (a) müsste näheres in den Header-Files stehen ... oder einfach mal direkt an den Hersteller wenden.
|
|
|
09.01.2021, 15:13
|
IchSelbst
LVF-Guru
Beiträge: 3.698
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RE: C-String-Zeiger Format
(09.01.2021 14:42 )hansi9990 schrieb: das scheint nicht nötig zu sein.
Hier muss ich aber sagen: Der Scheint trügt! Noch schlimmer: Das ist gefährlich!
Wenn in der Beschreibung steht, dass der Datensatz soundsoviele Zeichen hat, kannst du nicht einfach 36 weniger machen. Streng genommen bedeutet ein Zugriff auf einen von 36 nicht vorhandenen Speicherplätze eine Access-Violation (AV). Das dumme daran ist, dass es nicht zwangsläufig zu einer AV kommen muss. Außerdem: Eine AV in einer DLL muss noch nicht zwangsläufig zu einer AV in LV führen. Und es geht noch zwei Stufen schlimmer: Irgendwann stürzt LV ab an einer Stelle, die mit deinem Modul überhaupt nichts zu tun hat. Das Schlimmste aber ist: Es passiert Monate lang nichts - aber dann.
Wenn im Beispiel irgendeinem Parameter kein Wert zugewiesen wurde, heißt das aber nicht, dass der Speicher, in dem die Parameter stehen, nicht alle Parameter enthält. Auch die, denen kein Wert zugewiesen wurde, befinden sich im Speicher - halt mit mindestens undefiniertem Inhalt (meistens ist der Compiler aber so intelligent, dass er beim Anlegen der Variable die Variable löscht, also alles Null).
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
09.01.2021, 17:49
|
hansi9990
LVF-Gelegenheitsschreiber
Beiträge: 180
Registriert seit: Mar 2015
2019
2014
DE
96xxx
Deutschland
|
RE: C-String-Zeiger Format
Ok, danke für die Warnung.
Irgendwie scheint das aber nur vorgesehen zu sein, so ganz verstehe ich auch nicht welches Passwort das sein soll, es gibt zwar eines für das WebIF des Moduls aber das funktioniert hier nicht. Evtl. ist das auch vom Hersteller nur mal als Platzhalter drin und wird in einem späteren Release aktivert.
Da ich es nicht benötige wird es mir erst dann auf die Füße fallen wenn der Bedarf dafür da ist.
|
|
|
25.08.2023, 12:16
|
rolfk
LVF-Guru
Beiträge: 2.306
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
RE: C-String-Zeiger Format
Ich gebe zu dass der Header einigermassen verwirrend ist und den Parameter als C String definiert aber anscheinend eine Struct haben möchte. Nicht so schön. Allerdings ist die Datentypbezeichnung im Header einfach eine Information, wenn da anstelle davon wirklich eine flache C Structur als Pointer übergeben werden soll ist das auch in LabVIEW so machbar!
Dazu muss man aber ein bischen basteln und baut man einen Cluster mit folgenden Elementen:
Der erste String muss man als einen Cluster mit 256 uInt8 Elementen definieren.
Dann kommen die drei uInt32 Integers
Und zuletzt kommt noch mal ein Cluster mit 32 uInt8 Elementen
Diesen Cluster verbindet man an den Call Library Node Parameter der als Adapt to Type konfiguriert ist. Das sieht dann ungefähr so aus:
|
|
|
| |