INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Thema geschlossen 

Übergeben einer Struktur!



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!

18.12.2006, 08:58
Beitrag #1

B.C.I.
Unregistered


 







Übergeben einer Struktur!
Guten Morgen alle miteinander

Vorerst einmal: die Suche gab keine Ergebnisse, und auch in Google und dergleichen konnte ich nichts finden.

Das Problem: Wir haben als Eingang in unsere DLL mehrere Strukturen

Struktur 1: 8 BOOLsche Werte
Struktur 2: 3 BOOLsche Werte
Struktur 3: SHORT,UINT,UINT
Struktur 4: Char Array

Unser Problem ist nun den richtigen Eingangstyp für die DLLs zu finden.

Eine mögliche Überlegung unsererseits war das die 8 boolschen Werte entweder als 1*8bit (INT) übertragen werden, eine andere das jede mit eigenen 4-Byte Variablen übertragen wird.

Kurz gesagt: wir haben keine Ahnung!!!

Falls jemand erfahrung mit dergleichen Probleme hat so soll er sich bitte melden. Auch Weblinks die dieses Thema umfassen sind erwünscht!

Vielen Dank schon mal im vorraus,

bye
to top
Anzeige
18.12.2006, 09:59
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergeben einer Struktur!
' schrieb:Das Problem: Wir haben als Eingang in unsere DLL mehrere Strukturen

Struktur 1: 8 BOOLsche Werte
Struktur 2: 3 BOOLsche Werte
Struktur 3: SHORT,UINT,UINT
Struktur 4: Char Array
Ich es jetzt "eure" DLL oder eine "zugekaufte"?

Wenn es eure ist, musst ihr doch wissen, mit welchen Datentypen die Daten übergeben werden. Wenn es eine zugekaufte ist, sollte es hierfür vom Hersteller eine Schnittstellenbeschreibung geben.

Im Übrigen: 8 Boolsche Werte kannst du übertragen wie du willst. Das kommt auf die Schnittstelle an. Alle 8 in einem U8 ist zwar platzsparend, ob sinnvoll kommt auf die Applikation an. Boolsche Werte kann man aber auch pro Wert in U8 (Standard) oder U16 oder U32. Bei 8 Werten wird mal dann wohl einen Pointer auf Bool nehmen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
18.12.2006, 10:17
Beitrag #3

B.C.I.
Unregistered


 







Übergeben einer Struktur!
Es ist leider nicht unsere eigene. Das Problem ist nur das der Hersteller gerade sehr wenig Zeit hat und wir deswegen noch nicht nachfragen konnten. Also gibt es keine allgemeine Vorschrift dafür?
Danke, ich werde mich mal mit dem Herausgeber zusammenreden!
to top
18.12.2006, 10:28
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergeben einer Struktur!
' schrieb:Das Problem ist nur das der Hersteller gerade sehr wenig Zeit hat
Faule Ausreden.

Zitat:Also gibt es keine allgemeine Vorschrift dafür?
Nein, ich kenne keine. Bei unendlich vielen Möglichkeiten, Daten zu übertragen, macht eine Vorschrift, die das abdecken will, keinen Sinn.

Zitat:Danke, ich werde mich mal mit dem Herausgeber zusammenreden!
Im Prinzip würde dir reichen ein Ausdruck vom Funktionskopf. Der wenn noch in C++ ist, wird sich schon jemand finden, der das in LV umsetzt. Vier Strukturen, macht vier verschiedene Funktionsköpfe - vier mal kopieren und mailen. Aufwand: Schneller als ich dieses Posting geschrieben habe. Und dafür hat der Hersteller keine Zeit? Kauft euch was gescheides. Rolleyes

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
18.12.2006, 14:54
Beitrag #5

B.C.I.
Unregistered


 







Übergeben einer Struktur!
' schrieb:Faule Ausreden.
Pccrash

Also, eine Struktur sieht folgendermaßen aus:
8 * 4 Byte hintereinander für die boolschen Werte
3 * 4 Byte hintereinander für die boolschen Werte
Das haben wir aus dem C-Code durch debugen rausgefunden

Also dachten wir es sei ein 8-Dimensionales (bzw. 3) Array
Vorzeichenbehafteter 32bit Integer
Array Format: Array-Handle

Mit dem Array-Format und dem Vorzeichenbehaftet oder nicht sind wir uns leider nicht sicher.

Der Effekt dieses genialen Programmes ist folgender: Totalabsturz von LabVIEW in unter einer Sekunde *rekord*
HELP

Die Frage in kurzform:
Wie übergebe ich über eine DLL eine Struktur mit 4*8 Byte inhalt (boolsche Werte in 4 Byte konvertiert)?
to top
18.12.2006, 16:22
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergeben einer Struktur!
' schrieb:Also, eine Struktur sieht folgendermaßen aus:
8 * 4 Byte hintereinander für die boolschen Werte
3 * 4 Byte hintereinander für die boolschen Werte
Das haben wir aus dem C-Code durch debugen rausgefunden
Da fehlen jetzt nur noch mehrere wichtige Sachen:
* Aufrufkonvention: Naja, da gehen wird mal von C aus
* Hat die Funktion einen Rückgabewert: Zwar tippe ich auf I32, es würde aber auch viod möglich sein.
* Werden diese acht Werte als Daten übergeben oder wird ein Pointer auf die Daten übergeben? Ich tippe auf Pointer.

Zitat:Also dachten wir es sei ein 8-Dimensionales (bzw. 3) Array
8-Dimensional? Doch eher 1-Dimensional mit 8 Werten.

Zitat:Vorzeichenbehafteter 32bit Integer
Ja. Ob I32 oder U32 dürfte egal sein.

Zitat:Array Format: Array-Handle
Eu-jeu-jeu. Ist zwar schön, aber wer so eine (überall einsetzbare) DLL schreibt - naja. Ich tippe auf Pointer auf Daten. Also: Typ: Array; Datentyp: I32; Array-Format: Array-Datenzeigen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
Anzeige
18.12.2006, 16:27
Beitrag #7

B.C.I.
Unregistered


 







Übergeben einer Struktur!
' schrieb:Da fehlen jetzt nur noch mehrere wichtige Sachen:
* Aufrufkonvention: Naja, da gehen wird mal von C aus
* Hat die Funktion einen Rückgabewert: Zwar tippe ich auf I32, es würde aber auch viod möglich sein.
* Werden diese acht Werte als Daten übergeben oder wird ein Pointer auf die Daten übergeben? Ich tippe auf Pointer.

8-Dimensional? Doch eher 1-Dimensional mit 8 Werten.

Ja. Ob I32 oder U32 dürfte egal sein.

Eu-jeu-jeu. Ist zwar schön, aber wer so eine (überall einsetzbare) DLL schreibt - naja. Ich tippe auf Pointer auf Daten. Also: Typ: Array; Datentyp: I32; Array-Format: Array-Datenzeigen.

Aufrufkonventionen waren bisher immer stdcall, denke nicht das sich das auf den Schlag ändert

Ja, Rückgabewert I32

Die 8 Daten werden als Daten, NICHT als Pointer übergeben

1 Dimensional mit 8 Werten *hm* Zumindest meint unser Projektleiter was anderes
to top
18.12.2006, 18:10 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2006 18:12 von IchSelbst.)
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergeben einer Struktur!
' schrieb:Aufrufkonventionen waren bisher immer stdcall, denke nicht das sich das auf den Schlag ändert
Nun gut, dann muss das halt nur im DLL-Knoten entsprechend angepasst werden.

Zitat:Ja, Rückgabewert I32
=> Anpassen im DLL-Knoten.

Zitat:Die 8 Daten werden als Daten, NICHT als Pointer übergeben
Das hieße aber: der Funktionsaufruf hat 8 Parameter vom Typ Numerisch. Alles andere z.B. mit Array sind immer Pointer. Das siehst du am *, der in der Übergabeliste im DLL-Knoten sichtbar wird.

Zitat:1 Dimensional mit 8 Werten *hm* Zumindest meint unser Projektleiter was anderes
8*1 und 1*8 kommt speicherplatzmäßig aufs gleiche raus.

Habt ihr mal mit dem Pointer auf Array[1..8] probiert?

Nachtrag:
Fehler in der Übergabeliste, besonders wenn Pointer erwartet werden, führen meistens zum Applikations-Absturz - nicht immer, aber oft. Wenn nicht, dann kann es aber trotzdem sein, dass das Applikstionssystem Schaden genommen hat.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
08.01.2007, 13:50
Beitrag #9

B.C.I.
Unregistered


 







Übergeben einer Struktur!
Sodala, damit du mal das C-Programm siehst:

<blockquote>typedef struct
{
BOOL ain1;
BOOL ain2;
BOOL ain3;
BOOL ain4;
BOOL ain5;
BOOL ain6;
BOOL ain7;
BOOL ain8;
}_AIN;</blockquote>

<blockquote>typedef struct
{
BOOL scan;
BOOL dio1_direction;
BOOL dio2_direction;
}_DIO;</blockquote>

Funktions Prototyp:

BOOL __stdcall Unterprogramm(HANDLE handle1,_AIN Analog,_DIO Digital);

Also Rückegabewert war noch nie ein Problem
Handle bekommen wir von einer anderen DLL als schönen Wert zurück (Numerisch, 32bit, Zeiger auf Wert)
Für _AIN und _DIO fehlen uns die Ideen. Wie es im C-Speicher aussieht sind das jeweils 8 (bzw. 3) mal 32bit hintereinander. Somit wäre die logische Idee doch insgesamt 32 Byte hintereinander reinzuschicken. Doch wie!?

Also ein 1-D Array mit 8 Werten ist mir komplett neu. Wie erstellt man sowas?

Also sollte noch mal jemand eine Idee haben, wir sind für alle Ideen offen!
to top
08.01.2007, 14:22
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Übergeben einer Struktur!
' schrieb:Für _AIN und _DIO fehlen uns die Ideen. Wie es im C-Speicher aussieht sind das jeweils 8 (bzw. 3) mal 32bit hintereinander.
Probier halt mal, ab man ein Cluster als Daten (nicht als Pointer auf Daten) übergeben kann. Ansonsten könntest du ja mal ausprobieren, die 1+8+3=12 Werte explizit zu übergeben. Ob du 12 Parameter, von denen jeder 32Bit lang ist, angibst oder 3, von denen einer z.B. 8*32Bit lang ist, sollte eigenlich egal sein - vorausgesetzt es werden Daten und nicht Pointer auf Daten übergeben.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
Thema geschlossen 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Struktur mit Zeiger auf weitere Struktur an DLL übergeben Wheeliemaster 2 6.847 27.05.2015 08:40
Letzter Beitrag: Wheeliemaster
  Daten einer Struktur aus LV einer DLL übergeben Predator 11 9.402 12.06.2007 14:00
Letzter Beitrag: rolfk

Gehe zu: