Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 5.908 pregleda

Najnovija ↓

dll missing 16.06.2003. u 23:12 · pre 284 meseca #1
Napravio sam svoj dll i u postojeci projekat ga dodao sa add reference...
I dok je dll tu, sve radi... ali kada obrisem dll i pokrenem program iz windowsa (ne VS-a), program puca kada pokusa da pozove metodu iz pomenutog dll-a. Try catch ne hvata ovaj exception, vec se javlja VS-ov debugger sa unhandled exception itd...
Re: dll missing 16.06.2003. u 23:29 · pre 284 meseca #2
Tako je, to je by design. U cemu je konkretno problem?
Re: dll missing 16.06.2003. u 23:49 · pre 284 meseca #3
Pa šta si očekivao da se desi?
Potpis
IOCC
Re: dll missing 17.06.2003. u 04:38 · pre 284 meseca #4
ocekivao sam da sledeci kod uhvati exception:

try
{
MojaKlasaIzDLLa.StatickaMetoda(); //ne mora staticka, bilo sta
}
catch
{
///blablabla
}

e problem je ako ne postoji taj dll, program puca a ne ulazi u catch blok. A glupo je da pisem funkciju koja ce da proba da nadje u direktorijumu i global cache-u (ili gde vec), dll koji ce program da koristi. Jednostavno, zasto try/catch ne hvata ovaj vid exceptiona? I kako to da resim osim na pomenuti nacin?
Re: dll missing 17.06.2003. u 19:13 · pre 284 meseca #5
Ako si taj dll (neka .NET komponenta, pretpostavljam) dodao u projekat sa Add reference, onda je se on učitava čim program startuje i ako ga nema, program puca. Nikad i ne stigne do tog tvog try-catch bloka. Naravno, postoji i mogućnost dinamičkog učitavanja, ali to je malo komplikovanije.
Potpis
IOCC
Re: dll missing 17.06.2003. u 20:01 · pre 284 meseca #6
Ne puca. Upravo sam ponovo otkucao kod i evo kako stvari stoje:

u dll projektu je klasa koja nema nista osim praznog konstruktora.
u aplikaciji je uradjen add reference na ovaj dll.
u aplikaciji na dugme btn1 samo kreiram klasu sa
mojaklasa tmp = new mojaklasa();
naravno, okolo je i try/catch kod iz prethodne poruke i to je sav kod.
izadjem iz devenv-a, odem u bin direktorijum aplikacije, obrisem *.pdb i *.dll tako da ostane samo mojaapp.exe
pokrenem mojaapp.exe i TEK KADA KLIKNEM na dugme btn1 iskace prozor sa exception-om! A try/catch ga NE HVATA!

izgleda da mi ostaje samo da dinamicki ucitam dll samo da bi proverio da li postoji.
Re: dll missing 21.06.2003. u 02:22 · pre 284 meseca #7
Citat:
Dragi Tata: Ako si taj dll (neka .NET komponenta, pretpostavljam) dodao u projekat sa Add reference, onda je se on učitava čim program startuje i ako ga nema, program puca.

Kao sto je twister zakljucio, ovo nije tacno, a zbog cega:
Citat:
Kada se neka metoda pozove po prvi put, CLR otkriva koje tipove metoda referencira. ... CLR ucitava datoteku referenciranog sklopa samo onda kada se pozove metoda koja referencira tip iz tog sklopa. To znaci da se za pokretanje neke aplikacije, ne zahteva prisustvo svih referenciranih skopova.
Jeffrey Richter, Applied Microsoft .NET Framework Programming, MSPress, 2002


Sto se tice toga sto ne uspevas da uhvatis exception, pretpostavljam da windows forms okruzenje (Application ili nesto slicno...) hvata izuzetke najviseg nivoa (znaci klasu Exception, prakticno unhandled exception, mada...) ne dopustajuci da to uradi sama aplikacija. Ovo samo pretpostavljam, nisam siguran. Ako neko tacno zna sta se desava, bio bih mu zahvalan ako bi to podelio sa ostalima.

Pozdrav
Potpis
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
Re: dll missing 23.06.2003. u 20:56 · pre 284 meseca #8
Hehehe, mislim da sam provalio u čemu je stvar. Taj izuzetak nije bačen kad pozoveš funkciju sa MojaKlasaIzDLLa.StatickaMetoda(); već pre toga - odmah po pozivu funkcije OnClick. Naime, ako pogledate onaj citat koji je ostavio havramm, lepo kaže:

Citat:
CLR ucitava datoteku referenciranog sklopa samo onda kada se pozove metoda koja referencira tip iz tog sklopa


Dakle, dll se učitava kad se pozove metoda koja koristi tip iz tog dll-a, a ne kad se pozove prva metoda iz tog tipa. Izuzetak je bio bačen odmah po pozivu OnClick metoda i nikad se nije ni stiglo do try-catch bloka.
Potpis
IOCC
Re: dll missing 24.06.2003. u 01:18 · pre 284 meseca #9
Svaka cast!
Potpis
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme