Dziękuję kolegom za udział w dyskusji nad moim problemem.
Uruchamiam program ikonką Run w pasku narzędziowym
odpowiadającą poleceniu Run z menu Run i klawiszowi F9.
Wygląda to na uruchamianie z debuggowaniem,
ponieważ w przypadku błędów C++ Builder zatrzymuje kompilację
otwiera plik żródłowy w którym jest błąd, zaznacza linię w kodzie w której jest błąd
i w oknie komunikatów Messages opisuje mniej albo bardziej dokładnie na czym ten bład polega.
W tym przypadku C++ Builder przechodzi przez kompilację
podczas której wyświetla okienko kompilacji
z informacją o kompilacji kolejnych plików źródłowych w projekcie
nie zatrzymując się na żadnym błędzie.
Po zakończeniu kompilacji C++ Builder przechodzi do linkowania
skompilowanych plików źródłowych wchodzących w skład projektu
podczas którego wyświetla okienko linkowania nie zatrzymując się na żadnym błędzie.
Po zakończeniu linkowania okienko linkowania zostaje zamknięte
i w oknie komunikatów Messages pojawia się na końcu komunikat Success.
Dopiero w po tym zamiast otwarcia zbudowanego programu pojawia się okienko z komunikatem:
Project nazwa_projektu.exe raised exception class $C0000090
with message 'floating point invalid operation at 0x0061169d'
Program jest narzędziem służącym do automatyzacji wprowadzania danych
z dokumentów księgowych do programów księgowych.
Przy kodzie z instrukcją warunkową:
if ( (dokumenty[i]=="Faktura" && dokumenty[i+1]=="VAT:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="VAT:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="VAT" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="VAT" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="nr:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="nr:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="NR:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="nr" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="nr" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="NR" )
|| (dokumenty[i]=="Nr" && dokumenty[i+1]=="faktury:")
|| (dokumenty[i]=="NR" && dokumenty[i+1]=="FAKTURY:")
|| (dokumenty[i]=="Nr" && dokumenty[i+1]=="faktury" )
|| (dokumenty[i]=="NR" && dokumenty[i+1]=="FAKTURY" )
|| (dokumenty[i]=="Numer" && dokumenty[i+1]=="faktury:")
|| (dokumenty[i]=="NUMER" && dokumenty[i+1]=="FAKTURY:")
|| (dokumenty[i]=="Numer" && dokumenty[i+1]=="faktury" )
|| (dokumenty[i]=="NUMER" && dokumenty[i+1]=="FAKTURY" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]==":" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]==":" ))
{
Numer_dokumentu=dokumenty[i+2];
jest_numer_dokumentu=1;
};
program otwiera się poprawnie,
a jeśli rozbuduję tą instrukcję warunkową o kilka dodatkowych wariantów
napisu przed numerem faktury w różnych fakturach:
if ( (dokumenty[i]=="Faktura" && dokumenty[i+1]=="VAT:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="VAT:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="VAT" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="VAT" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="numer:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="Numer:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="NUMER:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="numer:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="Numer:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="NUMER:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="numer" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="Numer" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="NUMER" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="numer" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="Numer" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="NUMER" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="nr:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="nr:" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="NR:" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]=="nr" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="nr" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]=="NR" )
|| (dokumenty[i]=="Nr" && dokumenty[i+1]=="faktury:")
|| (dokumenty[i]=="NR" && dokumenty[i+1]=="FAKTURY:")
|| (dokumenty[i]=="Nr" && dokumenty[i+1]=="faktury" )
|| (dokumenty[i]=="NR" && dokumenty[i+1]=="FAKTURY" )
|| (dokumenty[i]=="Numer" && dokumenty[i+1]=="faktury:")
|| (dokumenty[i]=="NUMER" && dokumenty[i+1]=="FAKTURY:")
|| (dokumenty[i]=="Numer" && dokumenty[i+1]=="faktury" )
|| (dokumenty[i]=="NUMER" && dokumenty[i+1]=="FAKTURY" )
|| (dokumenty[i]=="Faktura" && dokumenty[i+1]==":" )
|| (dokumenty[i]=="FAKTURA" && dokumenty[i+1]==":" ))
{
Numer_dokumentu=dokumenty[i+2];
jest_numer_dokumentu=1;
};
to po zakończeniu kompilacji i linkowania zamiast otwarcia programu
pojawia się okienko z komunikatem:
Project nazwa_projektu.exe raised exception class $C0000090
with message 'floating point invalid operation at 0x0061169d'
Nie widzę żadnego błędu w rozbudowie instrukcji warunkowej
o kilka dodatkowych wariantów w alternatywie logicznej,
ponadto w tym fragmencie kodu nie występują żadne działanie na liczbach rzeczywistych.
Stąd wynika moja aktualna bezradność w tej sytuacji.
podejrzewam, że ma to związek z systemem Windows.
Pozdrawiam
Paweł Frankowski