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 

Pointer auf Array mit Labview übertragen und darstellen



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!

04.07.2013, 15:29 (Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2013 15:41 von rolfk.)
Beitrag #13

rolfk Offline
LVF-Guru
*****


Beiträge: 2.314
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Pointer auf Array mit Labview übertragen und darstellen
(04.07.2013 14:50 )lupus022 schrieb:  So, ich habe meinen Code mal überarbeitet:
Code:
__declspec(dllexport) int* gen_WLTable(std::string CCD_Filename)
{
    int *ptr;
    ptr = &WAVENUMBERS[0];
    std::ifstream LUT(CCD_Filename, std::ifstream::in);
    std::string inputline;
    std::vector<std::string> tempstr;
    int i = 0;
    while(!LUT.eof())
    {
        std::getline(LUT, inputline);
        boost::split(tempstr, inputline, boost::is_any_of("\t"));
        std::vector<float> v;
        std::istringstream iss(tempstr[0]);
        std::copy(std::istream_iterator<float>(iss), std::istream_iterator<float>(), std::back_inserter(v));
        if(v.size())
        {
            WAVENUMBERS[i] = (int)(v[0]+0.5);
            i++;
        };
    };
    SIZEOFWN = i;
    return ptr;
};
(Funktion, um WAVENUMBERS zu füllen, und den Pointer darauf zurückzugeben)
Nur weiß ich jetzt noch nicht, wie ich den String in die obige Funktion bekomme. Wie mache ich denn das am dümmsten?
Umsatteln auf eine reine LabView-Version geht leider nicht, da in der Zwischenzeit noch ein paar Funktionen, die ich nur ungern umbauen möchte, hinzugekommen sind.
Vielen Dank!

Also wenn Du mit String den CCD_filenamen Parameter meinst, das geht grundsätzlich nicht. Da musst Du doch wirklich ein char* übergeben und den std:string halt in der Funktion von diesem erzeugen. C++ und Templates ist ja alles schön und gut, aber nur wenn Du sowohl den Caller als die Funktion selber voll unter Kontrolle hast. Ansonsten ist das praktisch nicht zu managen und im Fall von LabVIEW (und jeder anderen Applikation, auch solchen in C wo man meist nicht sicher weiss mit welcher C und C++ Runtime die Library gelinkt wurde) hat man nunmal vor allem Probleme.

Zudem, planst Du wirklich um WAVENUMBERS als globales Array irgendwo anzulegen und durch eine weitere Funktion in LabVIEW zu lesen? Das kann ja heiter werden! Ahh nein Du übergibst das Array als return value. Das ist ja genau so schlimm. LabVIEW kann keine Arrays als return value einlesen, da es ja keinerlei Möglichkeit hat zu bestimmen wieviele Elemente es den aus dem Array in ein LabVIEW Array kopieren kann.

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
30
Antwort schreiben 


Nachrichten in diesem Thema
RE: Pointer auf Array mit Labview übertragen und darstellen - rolfk - 04.07.2013 15:29

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Datenübergabe an DLL Pointer to Pointer Reiling 2 9.936 02.02.2018 10:59
Letzter Beitrag: Reiling
  Absturz durch unzulässige Pointer VS_03 3 10.659 28.10.2016 18:32
Letzter Beitrag: VS_03
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 17.667 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer und MoveBlock OXO 4 8.596 03.06.2013 16:31
Letzter Beitrag: OXO
  Pointer auf Subarray übergeben Event Horizon 5 7.757 15.07.2012 10:21
Letzter Beitrag: rolfk
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.431 11.05.2012 14:41
Letzter Beitrag: hawk72

Gehe zu: