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.


Antwort schreiben 

Delphi DLL in LabVIEW



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!

26.10.2006, 12:32
Beitrag #1

brenner2305 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Aug 2006

7.00
2006
kA

1097
Deutschland
Delphi DLL in LabVIEW

Sonstige .zip  Mult.zip (Größe: 102,07 KB / Downloads: 398)

Hallo Leute!

Ich probiere grade eine kleine in Delphi 7 geschriebene DLL in LabVIEW zum laufen zu bringen. Die DLL soll nur eine eingegebene Zahl mit 3 multiplizieren und dann wieder ausgeben.
Wenn ich in der "Call Library Funktion" unter "Calling Conventions" "C" eingestellt habe, gibt LabVIEW die in die DLL eingegebene Zahl wieder aus, ohne die Multiplikation durchzuführen.
Wenn ich unter "Calling Conventions" "stdCall (WinAPI)" einstelle, bekomme ich eine Fehlermeldung.
Hab das ganze noch nicht verstanden. Vieleicht funktioniert die Delphi DLL ja nicht unter LabVIEW?

Danke schonmal für eure Hilfe!

Ich leg alle Dateien gezippt mit bei.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2006, 15:44
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Delphi DLL in LabVIEW
' schrieb:Vieleicht funktioniert die Delphi DLL ja nicht unter LabVIEW?
Die Schnittstelle einer DLL ist normiert - das muss gehen.

Im Delphi-Sourcecode ergänzt du folgendes:

Code:
Function Multipli(num : Integer):integer; far; stdcall; export;

Und das VI sieht so aus:


Angehängte Datei(en)
Sonstige .vi  Multi.vi (Größe: 13,64 KB / Downloads: 352)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2006, 17:56
Beitrag #3

brenner2305 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Aug 2006

7.00
2006
kA

1097
Deutschland
Delphi DLL in LabVIEW
Vielen Dank für die Tipps!

Ich habe meine DLL dementschprechend geändert und bekomme keine Fehlermeldung mehr wenn ich in meinem Multi.vi die Option stdcall verwende. Aber ich habe immer noch den Effekt, dass die Zahl, die ich in die DLL schiebe, scheinbar unverändert wieder herraus kommt.
Leider kann ich mit meinem LabVIEW 7.0 deine Datei nicht öffnen. Vielleicht kannst du die Datei nochmal für mein LV speichern oder ein Bild von der Änderung einstellen. Ich wäre dir sehr dankbar!
Aber Danke erstmal für deine Mühe!

Gruß an alle!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2006, 19:30 (Dieser Beitrag wurde zuletzt bearbeitet: 26.10.2006 19:30 von IchSelbst.)
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Delphi DLL in LabVIEW
' schrieb:Aber ich habe immer noch den Effekt, dass die Zahl, die ich in die DLL schiebe, scheinbar unverändert wieder herraus kommt.
Stimmt. Du musst ja den Wert "Ausgabe-Parameter" benutzen anstelle des durchgereichten MULTI. "Ausgabe-Parameter" ist der Wert der Funktion, "MULTI" wäre eine Rückgabe "by Reference".

Zitat:Leider kann ich mit meinem LabVIEW 7.0 deine Datei nicht öffnen.
Du kannst dich ja mal bei NI beschweren. Tongue
; Passt das jetzt?


Angehängte Datei(en)
Sonstige .vi  Multi.vi (Größe: 10,79 KB / Downloads: 276)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2006, 08:38
Beitrag #5

brenner2305 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Aug 2006

7.00
2006
kA

1097
Deutschland
Delphi DLL in LabVIEW
Ja schönen Dank, jetzt habe ich gesehen, wie das hier funktioniert!

Aber wie sieht das aus, wenn man mehrere Funktionen in einer DLL nutzt oder diese eine Funktion mehrmals, dann kann ja nicht alles aus diesem Ausgabe Parameter heraus purzeln. Dann geht doch alles durcheinander.

Aber mit NI hast du recht, die LV 7.0 und 7.1 liegen für mich nicht so weit auseinander. Da sollten eigentlich alle Datein der Version 7 geöffnet werden können. Aber so wollen die wahrscheinlich ihr Geld verdienen.

Schönen Gruß!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2006, 09:41
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Delphi DLL in LabVIEW
' schrieb:Aber wie sieht das aus, wenn man mehrere Funktionen in einer DLL nutzt
Wenn du mehrere Funktionen hast - dann benutze sie halt. In Delphi stehen dann halt mehrere Funktionen im Sourcecode, so in der Art
Code:
function F1(parameter): type; stdcall; export;
function F2(parameter): type; stdcall; export;
function F3(parameter): type; stdcall; export;
In LV musst du dann in dem entsprechenden Auswahlfeld - dort, wo jetzt nur Multipl drinnen steht - die entsprechende auswählen: F1, F2 oder F3.

Zitat:oder diese eine Funktion mehrmals dann kann ja nicht alles aus diesem Ausgabe Parameter heraus purzeln.
Du meinst also: Durch den Aufruf einer einzigen Funktion mehrere Werte bekommen. Das entspricht dann quasi einem VI mit mehreren Ausgängen.

In Delphi benötigst du den VAR-Parameter (in C++ den *):
[code]function Multipli(VAR MAL: integer): integer; stdcall; export;
begin

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2006, 12:56
Beitrag #7

brenner2305 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Aug 2006

7.00
2006
kA

1097
Deutschland
Delphi DLL in LabVIEW
Danke erstmal für die Infos!

Aber alles habe ich leider immer noch nicht verstanden. Hier eine Beispieldatei, in der ich die Funktion Multi zwei mal verwenden möchte. So wie sie jetzt ist, bekome ich keine Werte herraus. Wenn ich bei den multis von Value auf Pointer stelle gibt es einen Programmabsturz.

Ich hoffe ich nerve dich nicht zu sehr und du kannst mir nochmal weiterhelfen?

Schönen Gruß!


Sonstige .vi  Multi2.vi (Größe: 18,92 KB / Downloads: 331)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2006, 16:56 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2006 16:57 von IchSelbst.)
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Delphi DLL in LabVIEW
' schrieb:in der ich die Funktion Multi zwei mal verwenden möchte.
Du verwendest die Funktion nicht zweimal - sondern: Du hat eine Funktion, von der du zwei Werte zurückbekommen willst.

Zitat:Wenn ich bei den multis von Value auf Pointer stelle gibt es einen Programmabsturz.
Is' ja klar: Du musst natürlich die DLL anpassen.

Guckst du hier:


Angehängte Datei(en)
Sonstige .zip  Delphi_7_Projekt_Multi.zip (Größe: 55,92 KB / Downloads: 305)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.10.2006, 12:10
Beitrag #9

brenner2305 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Aug 2006

7.00
2006
kA

1097
Deutschland
Delphi DLL in LabVIEW
Schönen Dank für das Beispiel!

Aber wie grade merkte, habe ich Probleme mit meinem Rechner. Als ich dein Programm ausführen wollte, ist LV abgestürzt, wie bei meinen Programmierversuchen auch. Jetzt habe ich mal die LV Trial auf einen anderen PC installiert und siehe da, dein Programm geht.
Da muss ich jetzt erstmal meinen Rechner auseinandernehmen.Smile

Schönes WE und danke für die Hilfe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.11.2006, 13:57
Beitrag #10

brenner2305 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Aug 2006

7.00
2006
kA

1097
Deutschland
Delphi DLL in LabVIEW

Sonstige .zip  Array_in_DLL.zip (Größe: 54,37 KB / Downloads: 359)


Hallo,

ich bin mal wieder auf Probleme gestoßen. Diesmal versuche ich ein Array in einer DLL zu erzeugen und die Daten des Array an LabVIEW zu übergeben.

Der Code in Delphi sieht so aus:
type DArray = array of Integer;

Function arrdll(laenge: Integer; Var arr: DArray):integer; stdcall; export;
var i,n: Integer;
begin
n:=laenge;
SetLength(arr, n);
for i:=0 to n do
begin
arr[i]:=i+3;
end;
end;

Exports
arrdll;

Dabei sollte folgendes passieren: Von LabVIEW übergebe ich einen Wert, der die Göße des Arrays angibt, bei mir im Programm "Arraylaenge" genannt. In der DLL wird dann ein Array dieser Größe erzeugt, und mit Daten aufgefüllt (hier i+3). Die Daten des Arrays sollen anschließend an LabVIEW übergeben werden.

Folgendes passiert dann:
(1) Der erste Wert in der Schleife der DLL ist i:=0. D.h. müsste dann arr[i];=i+3 =0+3=3 sein. Im Ausgabearray in LV erscheint aber der Wert 4.
(2) Im Ausgabearray sind beim ersten Durchlauf schon drei Felder initialisiert mit diesen Werten (4,0,0). Warum?
(3) Erhöht man die "Arraylaenge" werden die drei initialisierten Felder gefüllt (4,5,6). Bei weiterer Erhöhung der Arraylänge, werden keine anderen Werte mehr ausgegeben.

Der Sinn dieser ganzen Aktion ist der, dass in der DLL von einer Messkarte Daten erzeugt werden sollen, die in einem Array gespeichert werden. Parameter für die Messung sollen vom LV an die DLL übergeben werden und die Messdaten von der DLL zu LV.
Ich habe da wohl noch ein paar grundlegende Probleme mit LV und den Parametereinstellungen zur DLL. Leider habe ich in der Uni Bibo keine entsprechende Literatur für diese probleme gefunden. Ich hoffe man kann mir hier noch weiterhelfen

Meine Dateien hänge ich mit an. Bie mir läuft LV 7.0 und Delphi 7.
Schönen Gruß!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehler beim Schließen des VIs nach Delphi-DLL-Aufruf Bärbel 10 14.220 11.11.2013 11:44
Letzter Beitrag: andreaskoller
  Datenübergabe aus Delphi-DLL in LabVIEW kokisan2000 5 7.062 13.11.2009 19:42
Letzter Beitrag: Y-P
  Delphi-DLL mit globalen Variablen Bärbel 4 6.241 15.07.2009 06:32
Letzter Beitrag: rolfk
  LabVIEW DLL für Delphi erstellen hoho 6 8.583 12.01.2007 21:38
Letzter Beitrag: hoho
  Einbinden einer Delphi-dll Svenni 6 8.378 17.10.2006 12:05
Letzter Beitrag: Svenni

Gehe zu: