[ itf @ 04.07.2005. 12:22 ] @
Evo mene opet sa DLL-om...

Kako napraviti DLL u Borland C++ Builderu koji sadrzi nekakav prozor (TForm) nije uopce problem:

Code:
extern "C" void __declspec(dllexport) __stdcall f(){
    TDLLProzor* novi = new TDLLProzor(NULL)
    novi->ShowModal();
    delete novi;
}


Ovom eksportabilnom funkcijom koja se nalazi u DLL-u ce se dinamicki alocirati taj prozor koji ce se pojaviti u vasoj aplikaciji. Medjutim, ovaj isti postupak ne radi kada kreiram DLL unutar Visual C++a. Uvijek mi izbaci neku gresku u svezi memorije...

Kako napraviti da unutar MFC DLL-a mogu nekom eksportabilnom funkcijom prikazati prozor koji se u njemu nalazi? Hvala


[Ovu poruku je menjao itf dana 04.07.2005. u 13:24 GMT+1]
[ milanche @ 04.07.2005. 21:28 ] @
Evo ti kratkog opisa procedure (imali smo pre par godina slicnu temu)

1) Prilikom kreiranja DLL-a moras da odaberes opciju MFC Extension DLL

2) Window klasa koju eksportujes mora da ima u definiciji makro AFX_EXT_CLASS,
na primer:
class AFX_EXT_CLASS CNekiProzor: public CDialog

3) Postoji problem sa resource ID-ima DLL-a i aplikacije koja koristi taj DLL - ako dodje
do poklapanja, tj. DLL sadrzi resource ID iste numericke vrednosti kao i aplikacija,
crash je neminovan. Resenje - svaki dizajner aplikacije mora da zna koje numericke
vrednosti tvoj DLL koristi, sto nije tesko saznati.

4) Release verzija aplikacije zahteva release verziju DLL-a, inace vrlo cesto (da ne
kazem 'uvek') puca.

Mnogo bolje resenje, koje zaobilazi sve ove sitne zezalice je da napravis ActiveX
kontrolu, koja ima i ugradjenu (dosta rudimentarno, ali ipak dovoljno) zastitu protiv
neovlascenog koriscenja. Zapravo, mozes da specificiras da li tvoja kontrola moze da
se koristi u tudjoj aplikaciji ili samo u tvojoj.
[ itf @ 05.07.2005. 10:37 ] @
Hvala. Ovo radi, no cemu onda ovaj MFC DLL ako ga ne mogu iskoristiti? Preko njega nije moguce napraviti istu stvar?

[Ovu poruku je menjao itf dana 05.07.2005. u 11:38 GMT+1]