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 

Dll einbinden, mehrere Headerdateien...



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!

28.12.2006, 16:38
Beitrag #1

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Dll einbinden, mehrere Headerdateien...
Hallo!

Mal ein Schuss ins Blaue...

Ich habe eine DLL, die ich gerne einbinden möchte. Wenn ich im Assi die DLL auswähle, und den gleichnamigen Header (.h) hinzufüge, werden von 15 Funktionen nur 10 erkannt.

Meine Vermutung:
Da noch mehr Header mitgeliefert wurden, sind die fehlenden Deklarationen etc. bestimmt darin zu finden.

Aber:
Ich kann im Assi doch nur eine Header angeben....

Habt Ihr da eine Idee?

Gruß!

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
to top
Anzeige
02.01.2007, 11:50
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Dll einbinden, mehrere Headerdateien...
<div align="left">Hallo,

habe auch schon mal ein wenig mit dem DLL-Assistenten herumgespielt.

Meine bisherige Erfahrung: den Rest musst du von Hand machen. Wird wohl noch 1 oder 2 LV-Versionen dauern, bis der Assistent noch ein wenig mehr kann. Ich empfehle dir auch, alle erstellten VI's noch mal selber anzuschauen, manchmal sind die Datei-Typen, die der Assitent auswählt, nicht völlig richtig (z.B. int statt uint).

MfG, Jens</div>

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
to top
02.01.2007, 12:19 (Dieser Beitrag wurde zuletzt bearbeitet: 02.01.2007 12:24 von Mr.T.)
Beitrag #3

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Dll einbinden, mehrere Headerdateien...
Oh!

Oke - das geht also von Hand...

Das wäre sie gewesen. Mal shen, ob ich das hinbekomme..

Also denne - Danke und Gruß!

Edit: Datei angehängt


Angehängte Datei(en)
Sonstige .zip  MicroEpsilon_LibOpto_Setup.zip (Größe: 2 MB / Downloads: 193)

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
to top
10.01.2007, 08:30
Beitrag #4

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Dll einbinden, mehrere Headerdateien...
Hallo zusammen nochmal!

Ich habe die Geschichte mit dem Assi aufgegeben - und das ist gut so! Lol Mann will ja schliesslich auch wissen, was da so vor sich geht.

Jetzt stoße ich aber an die Grenzen meiner LV - zu - C - Datentypwandlung.

Genauer gesagt:
Mir geht es darum, die Deklaration von Variablen für die Funktionsübergabeparameter und Rückgabetypen herauszufinden. Als

Funktionsprototyp:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>int fn_Test(char szZeichen[260])</div>

Was ist nun der Übergabeparameter in LV? Wird z.B. der String in LV "ZeroTerminated"? Oder muß ich wirklich aus einem String erst ein Array, in welchem jedes Element ein Zeichen darstellt und abschliessend von Hand eine "ZeroTremination" einfügen?

Vielleicht könnt Ihr mir auf die Sprünge helfen..
Gruß!

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
to top
10.01.2007, 10:53
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Dll einbinden, mehrere Headerdateien...
' schrieb:
Code:
int fn_Test(char szZeichen[260])
Was ist nun der Übergabeparameter in LV?
So wie das da steht, also ohne * nach CHAR und mit einer Zahl (hier 260) in den eckigen Klammern würde ich ja sagen, dass die Daten direkt über den Stack übergeben werden müssen. Das hieße aber, dass 260 Zeichen auf den Stack kopiert werden müssten. Das aber kann ich mir nun gar nicht vorstellen. Jeder normale Programmierer übergibt Strings als Pointer. Nun hab ich aber auch schon gesehen, dass eine Pointer-Übergabe so deklariert wird: "(char StrValue[])" - also immernoch ohne *, aber auch ohne Zahl in den Klammern. Vielleicht soll ja die 260 nur dazu dienen, anzuzeigen, dass der Bereich 260 Zeichen groß sein muss.

Eigentlich sollte es dann ein PChar sein. Das ist ein Pointer auf einen Datenbereich der Basisbreite ein Byte, der mit einem #0 endet.

In LV würdest du als Übergabeparameter schon einen String nehmen können. Ich würde aus Sicherheitsgründen manuell dafür sorgen, dass der String durch ein #0 beenedet wird (Str=Str+#0); Das Zugriffsverfahren wäre dann "Zeiger auf Wert".

[quote]Oder muß ich wirklich aus einem String erst ein Array, in welchem jedes Element ein Zeichen darstellt und abschliessend von Hand eine "ZeroTremination" einfügen?[quote]Ob du einen String hast oder ein Array - für das Zugriffsverfahren "Zeiger auf Wert" ist das egal.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
to top
10.01.2007, 15:20
Beitrag #6

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Dll einbinden, mehrere Headerdateien...
Hallo und Danke!

Mit dem Funktionsprototyp hast Du Recht: Es handelt sich natürlich um eine Begrenzung der Zeichen.

Was ich aber nicht verstehe ist:

Als C Programmierer würde ich der Funktion den Pointer auf das erste Zeichen übergeben - also den Namen des Arrays XXX[y]:

char XXX[250] = {A,B,C};

Rückgabewert = fn_Test(XXX);

Damit muß es dann gehen. Wie mache ich das dann in LV? Da es sich bei dieser Funktion um eine Pfadangabe handelt, werde ich im VI also aus einem Pfad einen String machen. Und was dann?

- Ein Array, in dem jedes Zeichen des Strings ein eigenes Feld in einem Bytearray bekommt?
- Einen String in dem jedes Zeichen ein eigenes Feld bekommt?
- Einen String übergeben lassen?

In beiden Fällen sollte doch aber ein "Pointer auf" übergeben werden, welcher der Einstellungen ist das dann tatsächlich?

Hmmm, ich bin da gerade echt unbeholfen... Hoffe Ihr könnt noch mehr für mich tun - zumal da ja dann in anderen Funktionen noch Strukturen etc. ebenfalls übergeben werden müssen...

Gruß!

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
to top
10.01.2007, 23:39
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Dll einbinden, mehrere Headerdateien...
' schrieb:der Funktion den Pointer auf das erste Zeichen übergeben - also den Namen des Arrays XXX[y]
Im Prinzip ist das richtig.

Zitat:Da es sich bei dieser Funktion um eine Pfadangabe handelt, werde ich im VI also aus einem Pfad einen String machen.
Jawohl.

Zitat:Und was dann?
Dann erzeugst du einen DLL-Knoten, wählst die DLL-Datei, wählst das richtige Aufruf-Format (stdcall oder c - Achtung: sehr wichtig; wenn falsch, dann AccessViolation) und wählst die Funktion fn_Test. Dann den Rückgabeparameter als I32. Für den einen Parameter XXX wählst du den Typ String und dann das String-Format "C-String-Zeiger" - das ist dann ein PChar, also ein Zeiger auf die Daten (für Mindestgröße musst du glaub ich nichts angeben).

An den DLL-Knoten kann du dann ein String-Bedienelement anschließen. LV beendet Strings automatisch mit einem Nuller-Zeichen.

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

Mr.T Offline
LVF-SeniorMod


Beiträge: 1.007
Registriert seit: Jun 2005

2009
2005
kA

88400
Deutschland
Dll einbinden, mehrere Headerdateien...
Hallo!

Genau so habe ich das auch gemacht. Klasse - kann ja doch was...Wink
Bei der Mindestgröße habe ich mal eine max. Feldlänge eingegeben, nicht dass LV dann irgandwann Arbeitsspeicher umkopieren muss, weil die Größe nicht an einem Stück da ist...

Danke! ich melde mich wegen den Strukturen dann wieder.

Mit einem freundlichen Wort und etwas Gewalt erreicht man viel mehr als nur mit einem freundlichen Wort. [...Marcus zu Lennier, B5]
Alle Beiträge dieses Benutzers finden
to top
30
Thema geschlossen 


Gehe zu: