[ bcavlin @ 07.07.2003. 09:39 ] @
Cao,

da li se neko vec sreo sa ovakvim problemom u cbuilderu 5:

Koristim dva modula, jednu mdi formu i jedan dll fajl. Za dll fajl sam kreirao lib i u njega sam stavio formu sa jednom komponentom. U okviru cpp fajla za dll postoji sledeci kod

#pragma link "imeobjfajlakomponente"

isti taj kod se javlja u mdi formi posto i tamo koristim istu komponentu. Naziv komponente nije bitan jer se greska javlja sa bilo kojom komponentom koja koristi pragma link.

Kada pozovem dll fajl ( tj funkciju ) bez ove komponente, recimo samo da mi se prikaze forma, sve radi OK, a kada pozovem fajl sa komponentom glavna forma mi javlja gresku EClassNotFound exception.

Takodje ako stavim projekt fajl opciju delay dll load za doticni dll, sve radi dok ne ubacim neku stranu komponentu, a onda mi prikazuje da ne moze da radi delay zbog postojanja odredjenih promenjljivih.
[ leka @ 07.07.2003. 11:50 ] @
Jesi li tamo ubacio odgovarajuci(e) heder(e)?
[ bcavlin @ 08.07.2003. 09:54 ] @
Naravno,

jer mi se forma ne bi prikazala nikako. Ali posto sam jos radio na problemu utvrdio sam sledece:

posto mi kompajler linkuje sve objekte ( deklaracije ) u lib, kada exe fajl naidje na istu takvu definiciju ( custom komponente ) ispada da ne moze da pronadje njegovu pravu definiciju iz PACKAGE kojeg sam instalilrao, tako da mi prijavljuje konflikt i ne moze da pronadje definiciju klase. Pokusao sam i da stavi #pragma package (smart_init,weak) da bih mu rekao da ne zelim da mi uradi hardcode definicija vec da striktno koristi one koje su mu instalirane i pozvane od strane programa. Zbog toga se javlja i problem kod delay dll load.

Posto se vise nisam hteo zezati sa ovim problemom, kreirao sam forme na standardan nacin tj. LoadLibrary. E sad imam problem da kada kreiram vise formi u dll-u, recimo Child forma, pa u njoj DataModlue i Frame, Kada izlazim iz glavne aplikacije CodeGuard mi javlja problem curenja memorije ili jos gore, ne javi mi nista vec se Aplikacija ubije kada treba da deregistruje komonente i javi mi da ima veliki broj gresaka i da je usla u nekakav loop.

Da bih inicijalizovao dll koristim globalni pointer za Application i pre nego sto uradim release dll-a Apllication pointer vracam MDI formi.


Forme sam pokusao da kreiram i sa new i sa Application->CreateForm ali mi se desava isti problem prilikom gasenja glavnog programa. Inace sve radi OK, tj. child prozor sa svim formama se prikazuje OK, i program radi predvidjeno bez curenja memorije.

Da li neko mozda zna dobar namenski forum za borland builder gde je cou da se pominju ovakve stvari?
[ Rapaic Rajko @ 12.07.2003. 16:09 ] @
Uh, nisam bas siguran da sam pohvatao gde ti se sta nalazi, ali generalno gledano 'class not found' se leci pozivom RegisterClass() funkcije. A gde treba da stavis taj poziv, provali sam, jer kao sto rekoh, nije mi najjasnije tvoje pismo.
Jos nesto. Negde u help-u pise da RegisterComponent() ne povlaci automatsko pozivanje RegisterClass (ili tako nesto slicno, davno bese).
U svakom slucaju, ako imas klasu koju nisi instalirao kao komponent (u paletu) a zelis da bude dostupna (vidljiva) za kreiranje instanci, resenje je RegisterClass().
Pozdrav

Rajko