[BCB] Access violation bij aanmaken TMenuItem in DLL *

Pagina: 1
Acties:

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Hoi allemaal,

Ik heb een applicatie en een Dll, het doel van de Dll is aan de hand van wat gegevens het menu uit de applicatie opbouwen. Wanneer ik deze functionaliteit uit de Dll in de applicatie plaats, gaat het allemaal goed. Zodra ik echter de Dll wil gebruiken, krijg ik na het opstarten van de applicatie een EAccesviolation. De Dll wordt statisch gelinked, de accessviolation treed dan ook op zodra de Dll wordt ingeladen.

Het probleem vind echter alleen plaats, wanneer ik in de Dll een menu item aanmaak. Wanneer ik geen menu items aanmaak maar het menu item altijd null laat zijn, gaat het goed anders niet.
code:
1
2
TMenuItem *pItem = new TMenuItem(NULL);//levert een crash op
TMenuItem *pItem = NULL;//levert geen crash op


Ik zit nou al 4 dagen met dit probleem, heb op het internet weinig erover gevonden en hier ook niet. Kunnen jullie mij hiermee helpen?

Oh, voor mensen die bekend zijn met C++Builder, ik maak gebruik van
de dynamic version van de RTL
code:
1
2
//   If your DLL uses the dynamic version of the RTL, you do not need to
//   explicitly add MEMMGR.LIB as this will be done implicitly for you

Pascal


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je zegt dat je een AV krijgt zodra de dll wordt geladen, dus maw tijdens het opstarten van je app. In welke functie maak je dan een TMenuItem aan en waarom zou die functie worden aangeroepen als de dll laad?

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

En wie moet op dat moment in godesnaam de Owner zijn van het TMenuItem? Je geeft daar NULL mee als owner, maar dat knalt toch als ik me niet vergis ook als je het in een normale app doet? :?

Professionele website nodig?


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Ik heb geen idee waarom de AV optreedt. Owner NULL mag gewoon, dat betekent dat ik zelf verantwoordelijk ben voor het vrij maken van het geheugen als ik het menu item niet meer nodig heb.

Ik weet bijna zeker(90%) dat de AV komt doordat ik
code:
1
2
3
TMenuItem *pItem = NewItem(/*alle bijbehorende parameters*/);
of
TMenuItem *pItem = new TMenuItem(NULL);


komt. Dit weet ik zo zeker, doordat wanneer de regel in kwestie wegcommentarieer ik de AV niet krijg.

Ik vermoed dat het te maken heeft, met een parameter die de TMenuItem nodig heeft. Al weet ik niet welke.

groetjes

Pascal


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wordt ik genegeerd? Wat is het antwoord op mijn vraag?

Een TMenuItem hoeft idd geen owner te hebben, maar hoeft ook geen andere property/parameter ingesteld te hebben.

We adore chaos because we like to restore order - M.C. Escher


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Je wordt niet genegeerd LordLarry, de functie in kwestie wordt in zijn geheel niet aangeroepen. De Dll heeft een
code:
1
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved){ return 1; }
functie, welke wordt gebruikt tijdens het inladen. Daarnaast bevat de Dll 2 export functies. Welke NIET worden aangeroepen tijdens het inladen.

Pascal


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Gelukkig :)

Als die functie met die TMenuItem *pItem = new TMenuItem(NULL); erin nooit wordt aangeroepen voordat de fout ontstaat kan daar weinig fout aan zijn.

Waarschijnlijk zit het m dan in het feit dat je runtime packages gebruikt. Deze worden ook als statische dll's geladen als je dll en/of app geladen worden. Probeer het eens zonder die Dynamic RTL. Heb je wel de juiste bpl bestanden op de juiste plaatsen staan? Wat is de precieze AV melding?

We adore chaos because we like to restore order - M.C. Escher


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Hey, maar das een goede opmerking :)
Had ik idd zelf nog niet aan gedacht.
Ga het ff uit proberen.

Pascal


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Dank je LordLarry, het werkt nou :)

Pascal

Pagina: 1