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 

Dieses Thema hat akzeptierte Lösungen:

Datenübergabe an DLL Pointer to Pointer



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!

19.01.2018, 15:38 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2018 15:41 von Reiling.)
Beitrag #1

Reiling Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2015

14.0
2014
DE


Deutschland
Datenübergabe an DLL Pointer to Pointer
Hallo liebe Labview-Gemeinde,

ich habe schwierigkeiten bei der Datenübergabe an eine DLL Funktion. Der Datentyp in C lautet "double** parameter" (siehe Beschreibung der Funktionen im Anhang)

Das Beispielprogramm der Call Libary Funktion bringt mich leider auch nicht weiter. Darum habe ich mich dazu entschlossen hier mein Beispiel VI zum Aufruf der veschiedenen Funktionen der ebenfalls beigefügten dis_fat.dll hier einzustellen, in der Hoffnung, dass ich villeicht doch einen Eintrag dazu im Forum nicht gefunden habe und mir weitergeholfen wird.

Die Besipielfunktionen besitzen unterschiedliche Datenübergabeformate, multiplizieren die übergebenen doubles mit 2 und geben das Ergebnis zurück. Funktionen 14 und 15 laufen einwandfrei, Funktion 16 ist die zu knackende Nuss.

Folgenden Eintrag habe ich nicht angewendet bekommen. Special Case: 2D Arrays klang ganz gut.
https://www.labviewforum.de/Thread-Deref...n-Pointern

Ich freue mich auf konstruktive Anregungen


Angehängte Datei(en) Thumbnail(s)
   

79.4 .dll  dis_fat.dll (Größe: 107 KB / Downloads: 376)

14.0 .vi  Testprogramm_dis_fat_dll_Labviewforum.vi (Größe: 14,06 KB / Downloads: 408)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.01.2018, 22:04
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Datenübergabe an DLL Pointer to Pointer

Akzeptierte Lösung

(19.01.2018 15:38 )Reiling schrieb:  Die Besipielfunktionen besitzen unterschiedliche Datenübergabeformate, multiplizieren die übergebenen doubles mit 2 und geben das Ergebnis zurück. Funktionen 14 und 15 laufen einwandfrei, Funktion 16 ist die zu knackende Nuss.

Die Anregung ist um solche Parameter NICHT in einer DLL zu verwenden! Was Du da im Prinzip konstruiert hast ist ein Array von Pointern die jeweils ein Array von doubles beinhalten. Das ist in LabVIEW direkt nur mit sehr viel Voddoo zu realisiseren und das macht wenig Sinn. Zudem ist es inherent unsicher da Du in der Funktion von einer Anzahl Reihen und Kolonnen ausgehst aber niemand garantiert dass der Aufrufer dieses Array so angelegt hat.

Wenn Du das wirklich so machen willst müsstest Du ein Array von Pointer sized Integern anlegen das 3 Elemente besitzt und jedem dieser Element ein Memorypointer zuweisen der 4 * 8 bytes (sizeof(double)) besitzt. Es gibt sinnvollere Übungen dann in LabVIEW C Compiler spielen zu wollen. Besser wäre ein LabVIEW 2D Array mit Adapt to Type, Pass Handles, direkt an die DLL zu übergeben. Das sähe dann etwa so aus:

Code:
typedef struct
{
    int32_t dim1;
    int32_t dim2;
    double elm[1];
} Arr2DDoubleRec, *Arr2DDoublePtr, **Arr2DDoubleHdl;

int32_t function(Arr2DDoubleHdl arr)
{
    int32_t i, j;
    for (i = 0; i < (*arr)->dim1; i++)
    {
        for (j = 0; j < (*arr)->dim2; i++)
        {
             (*arr)->elm[i * (*arr)->dim2 + j] *= 2;
        }
    }
    return i * j;
}

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.02.2018, 10:59
Beitrag #3

Reiling Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2015

14.0
2014
DE


Deutschland
RE: Datenübergabe an DLL Pointer to Pointer
Vielen Dank für die Rückmeldung mit Lösungsvorschlag zu meinem Thema.

Wir werden auf Grund von Aufwand,sowie Performance und stabilität der Anwendung die Schnittstelle zur DLL ändern. Damit die Schnittstelle für möglichst viele Programme einfach zu händeln ist werden wir mehrdimensionale Arrays eindimensional mit Dimensionen übergeben.

Mit frendlichen Grüßen Steffen Reiling
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Absturz durch unzulässige Pointer VS_03 3 10.315 28.10.2016 18:32
Letzter Beitrag: VS_03
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 17.011 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer auf Array mit Labview übertragen und darstellen lupus022 35 32.561 19.07.2013 10:53
Letzter Beitrag: lupus022
  Pointer und MoveBlock OXO 4 8.225 03.06.2013 16:31
Letzter Beitrag: OXO
  Pointer auf Subarray übergeben Event Horizon 5 7.428 15.07.2012 10:21
Letzter Beitrag: rolfk
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.081 11.05.2012 14:41
Letzter Beitrag: hawk72

Gehe zu: