D
Hallo Zusammen
Der Titel klingt zwar banal. Jedoch bin ich langsam am verzweifeln.
Also. Ich habe 2 Klassen. Klasse "B.h" ist in der CPP-Datei der Klasse "A" eingebunden.
Klasse "A"
In der Klasse A wird in der Funktion "bfStartWeatherstationConnection" ein statisches Int-Array erstellt.
//Initialisierung
int loopArray[95]={0};
//Übergabe an unterfunktion
Retrieve_Telnet_Command(thePort, "LOOP 1", 95,&loopArray[0]);
In der Prozedur "Retrieve_Telnet_Command" wird dieser Array anschliessend gefüllt. Wenn ich nun den Inhalt nach dem Funktionsaufruf teste, sind alle Daten vorhanden.
Fehler
Nun übergebe ich den Array auf selbe Art- und Weise in eine Funktion "Load" der Klasse B.
void __fastcall WeatherLoopData::Load(int *loopByteArray)
{
int hours;
int minutes;
AnsiString timeString;
TDateTime currTime;
AnsiString kool;
for (int i = 0; i < 95; i++) {
kool = kool + IntToStr(loopByteArray[i]) + "\n"; //Diese Zeile proziert den Fehler (Klappt in anderer Funktion problemlos.)
}
ShowMessage(kool);
barTrend = System::Int32((unsigned char)loopByteArray[3]); // Sbyte - signed byte
barometer = (float)(System::Int16(loopByteArray[7])) / 1000; // Uint16
insideTemp = (float)(System::Int16(loopByteArray[9])) / 10; // Uint16
}
Lasse ich folgende Zeilen drinn.
AnsiString kool;
for (int i = 0; i < 95; i++) {
kool = kool + IntToStr(loopByteArray[i]) + "\n";
}
ShowMessage(kool);
Und starte danach die Applikation, so krieg ich folgende Fehlermeldung:
Titel: Benachrichtigung über Debugger-Exception
Meldung: Im Projekt XXX.exe ist eine Exception der Klasse EAssertionFailed mit der Meldung 'Assertion failure (C:\Builds\TP\indysockets\lib\System\IdStack.pas, Zeile 580)' aufgetreten.
Zeileninhalt:
/* TIdBaseComponent.Create */ inline __fastcall TIdTCPConnection(Classes::TComponent* AOwner)/* overload */ : Idcomponent::TIdComponent(AOwner) { }
Lösche ich aber die obengenannten Zeilen, so Funktioniert alles einwandfrei, bis auf die Richtigkeit der Daten des Arrays. --> Es kommen falsche Daten raus.
Für eure Bemühungen bin ich euch Dankbar.
(Ich sitze jetzt bestimmt schon 1h an diesem Problem. Aber ich habe es nicht lösen können oder sonst einen Ansatz finden.)
PS: Ich habe auch versucht, den Array (Pointer) in der ersten Funktion "bfStartWeatherstationConnection" zu deklarieren, einen Pointer an "Retrieve_Telnet_Command" zu übergeben und dort den Array dynamisch erzeugen zu lassen. Dies funktionierte auch, aber waren die Daten nur in der Funktion korrekt, die sie abgefüllt hat (-> Retrieve_Telnet_Command).
//Edit: -> Gelöst: Der Fehler war folgender:
Ich habe bei den Zeilen
AnsiString kool;
for (int i = 0; i < 95; i++) {
kool = kool + IntToStr(loopByteArray[i]) + "\n";
AnsiString zu UnicodeString geändert. Und siehe dar es funktioniert tadellos.