' schrieb:Ich habe ein Problem mit der übergabe eines LabVIEW-Arrays an meine C++ DLL.
Den Funktionsblock habe ich in LabVIEW wie folgt konfiguriert:
Typ: Array
Datentyp: 4-Byte-Single (Float)
Dimensionen: 1
Array-Format: Array-Datenzeiger
Der C++-Code sieht wie folgt aus:
void saveData(char const* dateiname, float* data[], short int* dateandtime)
{
FILE *f;
f = fopen(dateiname,"a");
for(int i=0;i<sizeof(data)-1;i++){
fprintf(f,"%fn",data[i]);
}
fclose(f);
}
Doch nun habe ich da eine völlig falsche Ausgabe der Werte aus LabVIEW.
Was ist hier das Problem?
Besten Dank im Voraus für eure Hilfe
Das Problem ist dass der Parameter float* data[] kein Array Pointer ist sondern ein Zeiger auf einen solchen. Auch kannst Du den sizeof() Operator (C++ Arraytypen mal vorneweg gelassen, aber hier bekommst Du von LabVIEW echt nur einen simplen C Arraypointer und kein C++ Array) nur auf Datentypen verwenden deren Grösse zur Kompilierzeit bekannt ist. Das geht hier ohne Kompilierfehler weil Du im Prinzip mit dem sizeof() Parameter nicht die Anzahl der Elemente im Array eruierst sondern die Anzahl Bytes die ein Pointer im Speicher belegt (also 4).
Du solltest das Ganze in etwa umwandeln wie folgt:
void saveData(char const* dateiname, float data[], int num, short int* dateandtime)
{
FILE *f;
f = fopen(dateiname,"a");
for(int i=0;i<num;i++){
fprintf(f,"%fn",data[i]);
}
fclose(f);
}
Rolf Kalbermatter