• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Access Violation podczas próby uruchomienia skompilowanego programu. RAD Studio 10.2.3 - gdzie zrobiłem błąd?

Object Storage Arubacloud
0 głosów
170 wizyt
pytanie zadane 9 sierpnia 2018 w C i C++ przez Piotr_Minda Początkujący (380 p.)
edycja 9 sierpnia 2018 przez Piotr_Minda

Witam, dawno tu nie pisałem, ponieważ jakoś udawało mi się rozwiązywać problemy metodą prób i błędów. Nie mniej jednak tym razem utknąłem na dobre.

Do rzeczy. Pisze we własnym zakresie aplikację okienkową w pakiecie RAD Studio koncernu Embarcadero jest to odtwarzacz mp3 ale taki bardziej lepszy :) wpadłem na pomysł rozbicia projektu na klasy co też uczyniłem. Na podstawie pierwszej klasy którą wcześniej już napisałem, dotyczyła ona ładowania skinów(Tu problemów nie miałem) postanowiłem napisać drugą klasę dotyczącą ładowania obrazków i to z nią mam problem, ponieważ w kodzie wykorzystywany jest komponent TBitBtn, który znajduje się na formie głównego programu i jest zadeklarowany w pliku .h głównej formy(TForm *MainForm). Natomiast klasa ma służyć do ładowania plików graficznych. I teraz cały projekt się kompiluje bezproblemowo, jednak przy próbie uruchomienia programu i sprawdzenia działania, wyskakuje błąd Access Violation oraz debbuger wskazuje, że problem jest z tą linijką kodu: 

PlayBtn->Glyph->Assign(graphic); gdzie PlayBtn komponentem umieszczonym na formie głównej.

I teraz nie wiem czego zapomniałem w kodzie klasy albo czego brakuje w klasie aby zlikwidować ten błąd.

Poniżej załączam plik klasy link zawiera plik h i cpp w jednym. natomiast wykomentowane jest co gdzie jest czym. Mile widziane wskazówki gdzie tu zrobiłem błąd albo o czym zapomniałem. 

//plik cpp klasy LoadImageFile
#pragma hdrstop
#pragma package (smart_init)
#include "LoadImageFile.h"
#include <vcl.h>



__fastcall TLoadImageFile::TLoadImageFile(TForm *MainForm)
{
    PlayBtn = new TBitBtn(MainForm);
}
__fastcall TLoadImageFile::~TLoadImageFile()
{

}
void __fastcall TLoadImageFile::LoadImagesFile(TForm *MainForm)
{
      TPngImage *graphic = new TPngImage();


    if(FileExists(L"Graphics/play.png"))
        {
            graphic->LoadFromFile(L"Graphics/play.png");
            PlayBtn->Glyph->Assign(graphic); //debbuger wskazuje, że tu jest problem
        }
     else
        MessageBoxW(Application->Handle, L"Unable Load PNG File!\n"
        L"Make Sure if is everythings ok, or Catalog, and skin is not deleted\n"
        L"or is not Damaged", L"Fatal Error", MB_OK| MB_ICONWARNING) == ID_OK;
}
//-------------------------------------------------------------------------------------------------------------------------------------
//plik h klasy LoadImageFile
#ifndef LoadImageFileH
#define LoadImageFileH

#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Buttons.hpp>
class TLoadImageFile
{
    public:
  __fastcall TLoadImageFile(TForm *MsinForm);
  __fastcall ~TLoadImageFile(); // constructor, destructor class LoadImageFile;
    //functions void load from resources
    void __fastcall LoadImagesFile(TForm *MainForm);
  /*    void __fastcall LoadImageFiles1();
    void __fastcall LoadImageFile2();
    void __fastcall LoadImageFile3();
    void __fastcall LoadImageFile4();
    void __fastcall LoadImageFile5();
    void __fastcall LoadImageFile6();
  */
    private:
    TBitBtn *PlayBtn;
    TForm *MainForm;



};
#endif

 

ps. wybaczcie angielski mój, ale lepiej mi jest zrozumieć idee, a za razem co w kodzie napisałem.

 

 

1 odpowiedź

0 głosów
odpowiedź 10 sierpnia 2018 przez Piotr_Minda Początkujący (380 p.)
Ehh wstyd  mi za siebie, ale problem rozwiązany.

W pliku głównym aplikacji było kilka błędów zabrakło deklaracji w konstruktorze aplikacji głównej dla klasy LoadImageFile, oraz brakowało parametrów w samej klasie a konkretnie wskaźników na obiekt TBitBtn, po dłuższej analizie tego dopisałem brakujące elementy, i klasa zaczęła działać, narazie jeden obiekt dla testu ale finalnie było ich 8.

Ale jestem szczęśliwy, znowu udało mi się samemu rozwiązać kolejny problem!

Podobne pytania

0 głosów
1 odpowiedź 262 wizyt
+1 głos
2 odpowiedzi 520 wizyt
pytanie zadane 25 września 2021 w C i C++ przez DeniS1 Początkujący (410 p.)
0 głosów
0 odpowiedzi 189 wizyt

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...