/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
DLL Som kan oprette en "Frame"
Fra : Thomas Lykkeberg


Dato : 18-11-02 18:42

Hej Gruppe

Jeg sidder her og skal lave et Windows program (Dialog baseret) i
Borland C++ Builder. Det skal være muligt at loade en DLL, som så kan
oprette en Frame i hoved aplikationen, og binde den som et child til
denne.

Her er en smule demo kode, som virker uden DLL.

TMyFrame *frm = new TMyFrame(Applicattion);
frm->Parent = this;
frm->Visible = true;

Dette virker fint, hvis jeg gør det i min main form's FormCreaate().
Men hvis jeg nu vil loade en DLL, som så indeholder denne TMyFrame
(DLL indeholdense VCL), og jeg vil have den vist på main formen,
hvordan skal det lykkes?

Det jeg dybest set vil have er en DLL som tilbyder funktionen:

void __stdcall ShowMyForm(TApplication *pApp,TForm *pMainForm)
{
TMyFrame *frm = new TMyFrame(pApp);
frm->Parent = pMainForm;
frm->Visible = true;
}

den skal så kaldes fra min main form, på følgende måde:

ShowMyForm(Application,this);

Men det virker ikke Det går fuldstændig galt i DLL'en ved:

frm->Parent = pMainForm;

Der bliver skam oprettet plads til "frm", så det er ikke det der er
problemet.

Er der nogen som kan hjælpe her?

/Thomas

 
 
Ivan Johansen (18-11-2002)
Kommentar
Fra : Ivan Johansen


Dato : 18-11-02 20:23

Thomas Lykkeberg wrote:
> Hej Gruppe
>
> Jeg sidder her og skal lave et Windows program (Dialog baseret) i
> Borland C++ Builder. Det skal være muligt at loade en DLL, som så kan
> oprette en Frame i hoved aplikationen, og binde den som et child til
> denne.

Jeg vil anbefale dig at bruge en package i stedet for en DLL. Fordelen
ved en DLL er at den kan blive kaldt fra et program lavet med en anden
compiler. Det kan du alligevel ikke her da du tager VCL komponenter som
parameter. Med en package undgår du derimod mange problemer i
forbindelse med VCL.

> Dette virker fint, hvis jeg gør det i min main form's FormCreaate().
> Men hvis jeg nu vil loade en DLL, som så indeholder denne TMyFrame
> (DLL indeholdense VCL), og jeg vil have den vist på main formen,
> hvordan skal det lykkes?

Du bør aldrig bruge OnCreate. Den er utilregnelig. Brug formens
constructor i stedet. Det samme gælder for OnDestroy.


Ivan Johansen


Thomas Lykkeberg (18-11-2002)
Kommentar
Fra : Thomas Lykkeberg


Dato : 18-11-02 21:05

On Mon, 18 Nov 2002 20:22:31 +0100, Ivan Johansen <NG@Padowan.dk>
wrote:

>Jeg vil anbefale dig at bruge en package i stedet for en DLL. Fordelen
>ved en DLL er at den kan blive kaldt fra et program lavet med en anden
>compiler. Det kan du alligevel ikke her da du tager VCL komponenter som
>parameter. Med en package undgår du derimod mange problemer i
>forbindelse med VCL.
Jeg har brug for at ændre min "FrontEnd" run-time, alt efter hvilken
DLL som vælges af brugeren. Det går jeg ud fra ikke er muligt med en
"Package" i Borland Builder?

>Du bør aldrig bruge OnCreate. Den er utilregnelig. Brug formens
>constructor i stedet. Det samme gælder for OnDestroy.
Det var også min fejl at skrive det, jeg bruger faktisk formens
constructor..

/Thomas

Ivan Johansen (18-11-2002)
Kommentar
Fra : Ivan Johansen


Dato : 18-11-02 21:45

Thomas Lykkeberg wrote:
> Jeg har brug for at ændre min "FrontEnd" run-time, alt efter hvilken
> DLL som vælges af brugeren. Det går jeg ud fra ikke er muligt med en
> "Package" i Borland Builder?

Det kan du sagtens. En package er en DLL med nogle specielle funktioner
der gør at den kun kan bruges af programmer skrevet i BCB. Derfor kender
den automatisk Application fra hovedprogrammet og du ungår en masse
andre problemer.

Du tilføjer bare den pågældende package til listen under
Components|Install Packages.


> Det var også min fejl at skrive det, jeg bruger faktisk formens
> constructor..

Godt

Ivan Johansen


Mogens Hansen (18-11-2002)
Kommentar
Fra : Mogens Hansen


Dato : 18-11-02 21:34


"Thomas Lykkeberg" <Fornavn.Efternavn@privat.dk> wrote in message
news:619ituog9a9hgf9thjpho151n78o47c2hq@4ax.com...

> Her er en smule demo kode, som virker uden DLL.

Er der nogen speciel grund til det skal ligge i et DLL - ofte giver det mere
besvær.


[8<8<8<]
> Men det virker ikke Det går fuldstændig galt i DLL'en ved:
>
> frm->Parent = pMainForm;

Hvordan går det galt ?

Hos mig kører det udemærket med C++Builder V6.0 (selvom det måske er lidt
underligt at have en form som child-vindue i en anden form - men dig om
det).
Du skal nok sikre dig at såvel EXE-filen som DLL'et bruger biblioteker (VCL
og runtime) som også ligger i et DLL.

Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste