• 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?

Konferencja JOIN! 2018
0 głosów
39 wizyt
pytanie zadane 9 sierpnia w C i C++ przez Piotr_Minda Początkujący (310 p.)
edycja 9 sierpnia 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 przez Piotr_Minda Początkujący (310 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ź 65 wizyt
0 głosów
1 odpowiedź 206 wizyt
0 głosów
1 odpowiedź 66 wizyt
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

55,375 zapytań

99,731 odpowiedzi

205,203 komentarzy

27,301 pasjonatów

Przeglądających: 278
Pasjonatów: 10 Gości: 268

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...