24.08.2006, 12:49
Beitrag #1
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Array als Return-Value bei DLL?
<div align="left">Hallo, Leute,
ich habe heute mal eine etwas weiterführende Frage.
Ich bin bei meinen bisherigen Aufgaben immer wieder mal auf folgendes Problem gestossen: Ich will eine Funktion aus einer DLL aufrufen, deren Rückgabewert aber ein Pointer auf ein Array ist, also z.B. etwas der folgenden Art:
float* Funktionsname(int arg1, int groesse)
Wie gesagt, Rückgabewert ist die Anfangsadresse eines Arrays.
Das ist ja in LabVIEW bisher als Rückgabewert nicht vorgesehen. Klar könnte man den Rückgabewert erst einmal einer 32bit-Integer zuweisen, damit sollte ich ja dann die Anfangsadresse haben, aber wie weise ich dann den Inhalt dieser Adressen einem LabVIEW-Array zu?
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.
|
|
|
24.08.2006, 13:52
Beitrag #2
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Array als Return-Value bei DLL?
' schrieb:<div align="left">Hallo, Leute,
ich habe heute mal eine etwas weiterführende Frage.
Ich bin bei meinen bisherigen Aufgaben immer wieder mal auf folgendes Problem gestossen: Ich will eine Funktion aus einer DLL aufrufen, deren Rückgabewert aber ein Pointer auf ein Array ist, also z.B. etwas der folgenden Art:
float* Funktionsname(int arg1, int groesse)
Wie gesagt, Rückgabewert ist die Anfangsadresse eines Arrays.
Das ist ja in LabVIEW bisher als Rückgabewert nicht vorgesehen. Klar könnte man den Rückgabewert erst einmal einer 32bit-Integer zuweisen, damit sollte ich ja dann die Anfangsadresse haben, aber wie weise ich dann den Inhalt dieser Adressen einem LabVIEW-Array zu?
MfG, Jens</div>
das ganze funktioniert automatisch wenn die Call Library Node richtig konfigurierst. Dort wird eingestellt, wie das Array übergeben wird, typischweise geschieht das in der von dir beschriebenen Art und Weise mit einem Pointer auf ein Array.
Wenn du nun die DLL selber schreibst, dann ist es sinnvoll, wenn du dir mal diesen Artikel anschaust. Wenn du einfach nur eine DLL von jemand anderem einbinden willst, hilft dieser Artikel weiter.
Im letzten Fall geht es eigentlich nur darum, den Prototypen "richtig zusammenzuklicken". Die Umsetzung von Pointer auf LabVIEW Array erfolgt automatisch durch die Call Library Node ...
Grüße
CB
|
|
|
24.08.2006, 14:28
Beitrag #3
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Array als Return-Value bei DLL?
<div align="left">Hallo, CB,
danke für deine Antwort, aber das hilft mir nicht weiter.
Das ein Array (und damit ein Pointer zu einem Array) bei den Argumenten einer Funktion übergeben werden kann, ist mir klar. Auch das hier LabVIEW die Umsetzung übernimmt.
Was aber, wenn die Funktion als Return-Wert den Pointer auf das Array übergibt??
LabVIEW erlaubt ja hier nur die Auswahl Void, Numeric und String (so wie's aussieht auch in Version 8.20)!
Bin (auch für negative), aber natürlich viel mehr über positive Nachrichten glücklich.
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.
|
|
|
24.08.2006, 15:54
Beitrag #4
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Array als Return-Value bei DLL?
' schrieb:Was aber, wenn die Funktion als Return-Wert den Pointer auf das Array übergibt??
LabVIEW erlaubt ja hier nur die Auswahl Void, Numeric und String (so wie's aussieht auch in Version 8.20)!
ouha, das is schlecht.
Hast du die DLL selbst entwickelt? --> dann würde ich das ändern
Wenn nicht bleibt dir eigentlich nur übrig eine Wrapper DLL zu schreiben, die die Daten so "umbiegt", dass du mit der CLN leicht drankommst ...
Grüße
CB
|
|
|
| |