/ 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
dummy kode nødvendig ...
Fra : Troels Thomsen


Dato : 23-06-05 13:48

Jeg har et program hvor jeg er nødt til at lave noget dummy kode, ellers går
programmet ned med "Access Violation at 0xFFFFFFFFF".

void __fastcall TForm1::init_callbackClick(TObject *Sender)
{
void* pR = myReceiveFunc; // ?????
void* pT = myTransmitFunc; // ?????
void* pM = myMajorErrorFunc; // ?????
if (pR || pT || pM) pR = 0 ; // ?????

g_Event_Receive(myReceiveFunc);
g_Event_Transmit(myTransmitFunc);
g_Event_MajorError(myMajorErrorFunc);

}

De nederst tre kald er funktionspointere der er loaded med adressen på den
pågældende funtion i en dll. De er ikke null.

myReceiveFunc etc er funktioner jeg har skrevet, de er heller ikke null

Et par definitioner:
typedef void (__stdcall *PEvent_Receive)(void (ReceiveFunc)(ESACAN_MSG
*msg, int reply));
PEvent_Receive g_Event_Receive;

Det skal siges at programmet går ned før dll'en får lyst til at kalde disse
funktioner, så det er ikke selve callbackfunktionerne der er fejl i.

Ellers virker programmet fint...

Det er jo super giftigt hvis jeg ikke har de rigtige antal parametre og
returværdier til sådan nogle funktionspointere. Kan det være derfor at det
er en fordel at der lige ligger nogle autoparametre på stacken ??

Hvad kan jeg gøre for at indkredse problemet ?

tpt



 
 
Mogens Hansen (23-06-2005)
Kommentar
Fra : Mogens Hansen


Dato : 23-06-05 19:05


"Troels Thomsen" <asdf@asdf.dk> wrote in message
news:42baafbb$0$267$edfadb0f@dread11.news.tele.dk...
> Jeg har et program hvor jeg er nødt til at lave noget dummy kode, ellers
> går programmet ned med "Access Violation at 0xFFFFFFFFF".
>
> void __fastcall TForm1::init_callbackClick(TObject *Sender)
> {
> void* pR = myReceiveFunc; // ?????
> void* pT = myTransmitFunc; // ?????
> void* pM = myMajorErrorFunc; // ?????

Det allokerer formodentlig noget plads på stakken.

> if (pR || pT || pM) pR = 0 ; // ?????
>
> g_Event_Receive(myReceiveFunc);
> g_Event_Transmit(myTransmitFunc);
> g_Event_MajorError(myMajorErrorFunc);
>
> }
>
> De nederst tre kald er funktionspointere der er loaded med adressen på den
> pågældende funtion i en dll. De er ikke null.
>
> myReceiveFunc etc er funktioner jeg har skrevet, de er heller ikke null
>
>
> Et par definitioner:
> typedef void (__stdcall *PEvent_Receive)(void (ReceiveFunc)(ESACAN_MSG
> *msg, int reply));
> PEvent_Receive g_Event_Receive;
>
> Det skal siges at programmet går ned før dll'en får lyst til at kalde
> disse funktioner, så det er ikke selve callbackfunktionerne der er fejl i.
>
> Ellers virker programmet fint...

Mon dog ?
Selvom du laver nogle dummy variable, er der nok en fejl i programmet som
ligger og lurer.

>
> Det er jo super giftigt hvis jeg ikke har de rigtige antal parametre og
> returværdier til sådan nogle funktionspointere.

Det burde compilerens typesystem gerne fange - så det er ikke det mest
oplagte problem.

> Kan det være derfor at det er en fordel at der lige ligger nogle
> autoparametre på stacken ??
>
> Hvad kan jeg gøre for at indkredse problemet ?

Det ligner noget C++Builder kode.
Hvis det er C++Builder V6 Professional, så slår du CodeGuard til (Project |
Options | CodeGuard) og så vil du sikkert få noget mere at vide om hvad der
er galt.

Venlig hilsen

Mogens Hansen



Ukendt (27-06-2005)
Kommentar
Fra : Ukendt


Dato : 27-06-05 23:01

>>
>> Ellers virker programmet fint...
>
> Mon dog ?
>

Lige mine ord !
Jeg prøver codeguard én af dagene

tpt



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

Månedens bedste
Årets bedste
Sidste års bedste