CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z przypisaniem delegaty....

Problem z przypisaniem delegaty....

dział ogólny

Problem z przypisaniem delegaty....

Nowy postprzez Slynx » czwartek, 4 sierpnia 2011, 19:13

Miałem właśnie dzisiaj kończyć pisanie, ostatni etap i przy kodzie z aktualizacją paska postępu dostałem błąd. Standardowy nullReference, czyli nieprzypisana żądna wartość/obiekt. Problem w tym, że u mnie to jest troszkę bardziej zagmatwane. Wszystko jest cały czas w fazie testów/pisania, więc... Jest główny program którym mamy takowy kod:
KOD cpp:     UKRYJ  
box->xUpData = File::ReadAllBytes("c://ver_log.txt");
                                 
box->uploadCallback = gcnew Upload::UpdateProgessCallback(this, &Main_Window::xxx);
box->Send();
 

gdzie box jest obiektem powstałym z dllki (nie wiem czy dobrze to tłumaczę - wczytałem dll-ki do program i box jest obiektem klasy jednej z tych dll-ek).
I teraz tak. dllki powstają oczywiście na podstawie klasy bazowej. W tej klasie bazowej:

KOD cpp:     UKRYJ  
Upload::UpdateProgessCallback^ uploadCallback;

Void MailBox::xInit()
{
        xMail = gcnew Mail();
        xMail->upd = this->uploadCallback;
};
 

I przy tworzeniu tego obiektu z dllki dodatkowo jest wywoływana funkcja xInit.
(To może wyglądać dość dziwnie, ale wycinam kod kawałkami i by wszystko działało, jak na razie właśnie tak to musi wyglądać;p)
I dalej. Klasa Mail ma w sobie już właściwą funkcję
KOD cpp:     UKRYJ  
Upload::UpdateProgessCallback^ upd;

//... kilkaset linii dalej...
Upload^ up = gcnew Upload(stream, upd);
 

I ostatecznie klasa Upload:
KOD cpp:     UKRYJ  
// konstruktor
Upload::Upload(Stream^ writeStream,  UpdateProgessCallback^ upd)
{
        write_stream = writeStream;
        upd_ = upd;
}

// UpdateProgessCallback ^ upd_; // plik .h
void jakas_funkcja()
{
upd_->Invoke(1222);
}
 

To nie jest finalny efekt, ale pozostałości po nieudanej próbie wprowadzenia wątków do klas. Tak czy inaczej, obiekt upd_ w momencie wywołania nie wskazuje na nic i program rzuca wyjątkiem nullReference. Nie wiem czy delegaty można w ten sposób przekazywać. Z jednej zmiennej do drugiej, aż w końcu trafią do właściwego obiektu, który ją wywoła (invoke).

Zastanawiałem się nad najprostszym rozwiązaniem, czyli użyć referencji, ale nie wiem jak i czy w ogóle można to łączyć z delegatami... Najlepiej jakby się ktoś po prostu wypowiedział na ten temat.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Problem z przypisaniem delegaty....

Nowy postprzez Slynx » niedziela, 7 sierpnia 2011, 13:00

Ok, już sam sobie poradziłem. Był pewien błąd, mianowicie przypisywałem deklarację, a dopiero potem tworzyłem obiekt. Teraz tworzę od razu obiekt i wszystko działa.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości