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