KOD cpp: UKRYJ
box->xUpData = File::ReadAllBytes("c://ver_log.txt");
box->uploadCallback = gcnew Upload::UpdateProgessCallback(this, &Main_Window::xxx);
box->Send();
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;
};
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);
//... 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);
}
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.



