Avatar billede sortguld Nybegynder
08. november 2001 - 11:24 Der er 4 kommentarer og
2 løsninger

Problem med SDI program!

Hej alle

Jeg har lavet en SDI applikation, hvor jeg har placeret nogle CEdit controls i mit view, hvor man skal kunne modtage data fra brugeren og omvendt kunne skrive data ud til brugeren.
Jeg har lavet en funktions erklæring til DoDataExchange, der hedder:

virtual void DoDataExchange(CDataExchange* pDX);

og selve funktionen ser sådan ud:

void CMedSysView::DoDataExchange(CDataExchange* pDX)
{
    CMedSysView::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CMedSysView)
    DDX_Text(pDX, IDC_FIRSTNAME, m_fornavn);
    //}}AFX_DATA_MAP
}

Fra min funktion, der skal skrive nogle data ud i min CEdit control, kalder jeg så til sidst:

UpdateData(FALSE);

Alt kan compileres og linkes, men så er succeshistorien også slut. Når jeg kommer til
UpdateData funktionen, får jeg en fejl. Ved debugning kan jeg se, at jeg får en \"access violation\", når jeg går ind i DoDataExchange. Har prøvet at lave DoDataExchange public, men der bør jo ikke have noget at sige, da det er en base class funktion, der kalder min DoDataExchange. Så vidt jeg husker er det på denne måde man opdaterer edit controls i en dialog boks, men åbenbart ikke helt i en SDI applikation.
Er der nogen der kan hjælpe mig med hvad jeg mangler i mit program, for at få det til at virke??
På forhånd mange, mange tak, da det er noget jeg skal bruge ret slemt!

/SortGuld
Avatar billede jespernaur Nybegynder
08. november 2001 - 11:48 #1
Nu har jeg ikke forstand på SDI applikationer, men er det du har lavet ikke en uendelig rekursion? I første linie af DoDataExchange kalder du DoDataExchange.
Avatar billede jpk Nybegynder
08. november 2001 - 12:01 #2
Du skal kalde baseklassens DoDataExchange, fx hvis du har nedarvet dit view fra CView, kalder du CView::DoDataExchange(pDX);
Avatar billede sortguld Nybegynder
08. november 2001 - 12:03 #3
DOOOOH!!! Du har ret Jespernaur!
Det var en skrive bøf!
I stedet for

CMedSysView::DoDataExchange(pDX);

skulle der selvfølge stå

CView::DoDataExchange(pDX);

for at kalde base class versionens DoDataExchange og ikke min egen version igen og igen og igen....

Men jeg havde ikke opdaget det lige med det første tror jeg, så tusind tak for hjælpen!
Du har kun lagt en kommentar ind. Hvis du lægger et svar ind, så fikser jeg lige nogle velfortjente point til dig...

Mvh. SortGuld
   
   
Avatar billede jespernaur Nybegynder
08. november 2001 - 12:29 #4
Her er svaret
Avatar billede sortguld Nybegynder
08. november 2001 - 12:43 #5
Ups! der gik lidt kage i min pointfordeling!
Jeg ville have givet dig jespernaur 100 og
jpk 50, da han også kom med et rigtigt svar.

Håber ikke det gør noget jesper...
Skal nok være ekstra gavmild næste gang :-)

/SortGuld
Avatar billede jespernaur Nybegynder
08. november 2001 - 17:01 #6
Det står dig frit for at oprette et nyt spm, hvis du synes, jeg burde have
flere point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester