LabVIEWForum.de
Array als Return-Value bei DLL? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Array als Return-Value bei DLL? (/Thread-Array-als-Return-Value-bei-DLL)



Array als Return-Value bei DLL? - jg - 24.08.2006 12:49

<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>


Array als Return-Value bei DLL? - cb - 24.08.2006 13:52

' 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


Array als Return-Value bei DLL? - jg - 24.08.2006 14:28

<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>


Array als Return-Value bei DLL? - cb - 24.08.2006 15:54

' 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