C-String-Zeiger Format - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: DLL & externer Code (/Forum-DLL-externer-Code) +---- Thema: C-String-Zeiger Format (/Thread-C-String-Zeiger-Format) Seiten: 1 2 |
C-String-Zeiger Format - hansi9990 - 26.12.2020 13:50 Hi Zunächst mal wünsche ich euch allen ein schönes Weihnachtsfest. Nun zu meiner Frage, ich habe hier die dll des Modulherstellers Deditec importiert, hier gibt es eine Funktion die sich "DapiOpenModuleEx" nennt mit der man ein Modul mit Parameter öffnen kann. Diese Parameter sind die IP Adresse, der Port und einTimeout. Die Beschreibung zu dieser Funktion sieht so aus: Zitat:Beschreibung: und das Struct ist im Headerfile so definiert: Zitat:typedef struct Da jedoch der Eingang am Knoten als String (C-String-Zeiger) definiert ist (siehe Bild im Anhang), jeodch drei Parameter übergeben werden sollen und ich in Sachen C keine Erfahrung habe, frag ich mich wie die übergenenen Daten an dem String-Eingang aussehen müssten. Kann mir hier jemand einenTipp geben, werden die eizelnen Parameter etwa mit Komma getrennt angegeben oder müssen hier irgendwelche Leeezeichen eingehalten werden? RE: C-String-Zeiger Format - IchSelbst - 27.12.2020 12:54 Wenn das mit dem struct DAPI_OPENMODULEEX_STRUCT so stimmt, könntest du folgendes probieren:
Dann einfach das Array of Char in einen String wandeln. Zur Kontrolle prüfst du, ob der String die richtige Länge hat: nämlich (256 + 8 + 8 + 8 +32). Diesen String hängst du an den DLL-Knoten, so wie in deinem Bild angegeben (oder an den entsprechenden Eingang des VIs, das den Code aus deinem Bild enthält). Bevor du den ersten Test machst, speicherst du alles ab. Dann ist nämlich der Ärger nicht so groß, wenn infolge eines fehlerhaften Codes die LV-IDE abstürzt ... RE: C-String-Zeiger Format - hansi9990 - 27.12.2020 15:04 Hi Danke für die Antwort. Bist du absolut sicher das ein C ULONG in LabView als 64bit interpretiert wird? Ich meine das wird in LV als 32bit Wert angesehen, zumindest steht das hier so https://zone.ni.com/reference/de-XX/help/371361R-0113/lvhowto/numeric_data_types_table/ und beim Import der dll wurden auch die ULONG als U32 umgewandelt. RE: C-String-Zeiger Format - IchSelbst - 27.12.2020 16:53 (27.12.2020 15:04 )hansi9990 schrieb: Bist du absolut sicher das ein C ULONG in LabView als 64bit interpretiert wird?Ein C ULong ist gemäß aller von mir gefundenen Beschreibungen ein 64-Bit-Wert. Folgedessen muss ja wohl LV auch 64 Bit machen. Im übrigen finde ich die LV-Bezeichnungen mit I8, I32 etc. besser als INT, LONG usw. Bei den LV-Bezeichnungen ist eindeutig I16 immer zwei Byte. Ein INT ist je nach Sprache 16 oder 32 Bit ... RE: C-String-Zeiger Format - hansi9990 - 27.12.2020 16:55 PS: Könnte das Beispiel im Anhang funktionieren? RE: C-String-Zeiger Format - hansi9990 - 27.12.2020 17:23 (27.12.2020 16:53 )IchSelbst schrieb:(27.12.2020 15:04 )hansi9990 schrieb: Bist du absolut sicher das ein C ULONG in LabView als 64bit interpretiert wird?Ein C ULong ist gemäß aller von mir gefundenen Beschreibungen ein 64-Bit-Wert. Folgedessen muss ja wohl LV auch 64 Bit machen. Im übrigen finde ich die LV-Bezeichnungen mit I8, I32 etc. besser als INT, LONG usw. Bei den LV-Bezeichnungen ist eindeutig I16 immer zwei Byte. Ein INT ist je nach Sprache 16 oder 32 Bit ... Ich meine aber doch das 64bit in LabView ULONGLONG oder Unsigned double sein müsste, darum nennt sich sicher auch die Funktion zum umwandeln in ein U32 "To Unsigned Long Integer Function" https://zone.ni.com/reference/en-XX/help/371361R-01/glang/to_unsigned_long_integer/ RE: C-String-Zeiger Format - IchSelbst - 27.12.2020 20:28 (27.12.2020 17:23 )hansi9990 schrieb: Ich meine aber doch das 64bit in LabView ULONGLONG oder Unsigned double sein müsste, darum nennt sich sicher auch die Funktion zum umwandeln in ein U32 "To Unsigned Long Integer Function"Probiers aus. Nimm zuerst U32. Scheint mir doch sinnvoller, weil das Modul doch schon von 2009 ist. Das VI sollte so funktionieren, außer dem Enumerator. Der ist wie Standard u16, solltest du also auf u32 umstellen. RE: C-String-Zeiger Format - hansi9990 - 28.12.2020 08:38 Danke für deine Unterstützung. Das mit dem falschen ENUM ist mir dann auch aufgefallen darum habe ich es in meinem Posting aktualisiert, evtl. hast du es vorher geladen. Leider bekomme ich das I/O Modul erst noch, ich wollte nur vorher schon den Treiber anpassen. RE: C-String-Zeiger Format - rolfk - 02.01.2021 16:36 (27.12.2020 16:53 )IchSelbst schrieb:(27.12.2020 15:04 )hansi9990 schrieb: Bist du absolut sicher das ein C ULONG in LabView als 64bit interpretiert wird?Ein C ULong ist gemäß aller von mir gefundenen Beschreibungen ein 64-Bit-Wert. Folgedessen muss ja wohl LV auch 64 Bit machen. Im übrigen finde ich die LV-Bezeichnungen mit I8, I32 etc. besser als INT, LONG usw. Bei den LV-Bezeichnungen ist eindeutig I16 immer zwei Byte. Ein INT ist je nach Sprache 16 oder 32 Bit ... Nein. ULONG ist ein Windows Datentyp der als synonym für "unsigned long" dient. unsigned sagt einfach dass es ohne Vorzeichen ist und ist für die Grösse des Datentypes irrelevant. long is unter allen modernen 32-bit Systemen immer ein 32-bit Integer. In 64-bit Systemen ist es unter Unix typischerweise ein 64-bit Wert während Microsoft es als 32-bit Wert sehen will. https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/32862b84-f6e6-40f9-85ca-c4faf985b822 Unter Windows muss man entweder "long long" oder den eindeutigeren "ïnt64_t" verwenden um einen 64-it integer zu bekommen. Und QWORD ist der Microsoft Windows spezifieke 64 Bit Datentyp. UINT64, ULONG64, und ULONGLONG sind andere mögliche Varianten die in Windows APIs als eindeutige 64-bit unsigned Integerdatentypen verwendet werden können. Microsoft C spezifik kann man auch "__int64" verwenden, aber das ist nicht portable zu anderen C Compilern die nicht Microsoft C kompatibel zu sein versuchen. Es war in Visual C 2005 der Datentyp den man verwenden musste wenn man 64 bit Integer haben wollte. RE: C-String-Zeiger Format - Freddy - 04.01.2021 08:28 Hallo Hansi, die Fa. DEDITEC bietet eine ausführliche Beschreibung für die Einrichtung in LabView und wie man die VI von Ihnen über die DLL erzeugt. Es werden da auch gewisse Änderungen bezüglich der 64 Bit in den VI Übergabe beschrieben. https://www.deditec.de/de/downloads/produkte/ Wenn Du Fragen zur Erzeugung der VI hast, der Support von DEDITEC wird dir sicher schnell helfen. Gruß Freddy |