23. oktober 2003 - 13:41
Der er
17 kommentarer og 1 løsning
CWinThread kalder GetDocument()
Jeg har en CWinThread tråd, som skal processere noget via en metode i min dokument klasse. Jeg vil så gerne i min CWinThread kalde denne funktion. Jeg gør således: 1. Får en pointer til mit doc via CMainFrame::GetActiveDocument. CMainFrame er initialiseret korrekt! Jeg kan sagtens sende beskeder via PostMessage 2. Jeg kalder en funktion. m_pDoc->myFunction() Hvad går galt? Jeg får et seriøst problem idet jeg forsøger at modtage en pointer.
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
23. oktober 2003 - 13:44
#1
Nu er "Jeg får et seriøst problem" jo ikke lige en nem beskrivelse at gå ud fra... Hvad sker der helt præcist?
23. oktober 2003 - 13:46
#2
Meget simplet mit program brager ned. Når jeg gør sådan her: //Når jeg vil eksekvere hér brager programmet end.. også uden assertions. m_pDoc = m_pFrame->GetActiveDocument();
23. oktober 2003 - 13:48
#3
Hvordan er m_pFrame initialiseret?
23. oktober 2003 - 13:51
#4
m_pFrame = (CMainFrame*)AfxGetMainWnd();
23. oktober 2003 - 13:57
#5
Og den er helt sikkert gyldig? Altså, det giver samme resultat med: m_pDoc = ((CMainFrame*)AfxGetMainWnd())->GetActiveDocument(); Hvilken klasse arver din CMainFrame fra?
23. oktober 2003 - 13:58
#6
CFrameWnd
23. oktober 2003 - 14:00
#7
AfxGetMainWnd -retunerer vel ikke et DOC? AfxGetMainWnd giver heller ikke indirekte adgang til CFrameWnd?
23. oktober 2003 - 14:04
#8
Problemet ved jeg ikke lige hvor opstår.. Problemet kan ikke være at det er fra en anden CWinThread ?
23. oktober 2003 - 14:05
#9
Nej, AfxGetMainWnd returnerer ikke en CDocument pointer. Hvad mener du med indirekte? Men hvad har alt det med ovenstående at gøre..?
23. oktober 2003 - 14:08
#10
Disse 2 linier: CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); CDocument* pDoc = pFrame->GetActiveDocument(); Kan jo også skrives som: CDocument* pDoc = ((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
23. oktober 2003 - 14:12
#11
Ok ok... Se jeg placerede min initialisering af m_pDoc, som er et gyldigt medlem i min tråd klasse -et andet sted -i min mainframe klasse. Så på en eller anden måde virkered det hvis jeg sagde.. m_pApp->m_myThread->m_pDoc = pDoc; //Dette virkede fint. Har det måske noget at gøre med at initialiserigen er placeret et forkert sted?
23. oktober 2003 - 14:19
#12
Hmm, er ikke med... Virker det eller virker det ikke? Hvad er det du vil opnå og hvordan?
23. oktober 2003 - 14:22
#13
Jeg skal bare ha' en pointer til mit aktive dokument i min tråd klasse. Jeg har fundet ud af det -men du får point alligevel for sparringen :) Initialiseringen af trådens doc medlem sker umiddelbart til sidst i InitInstance. Så virker det fint -og alle tråde er startet op.
23. oktober 2003 - 14:26
#14
Initialiserer du m_pDoc i din main thread?
23. oktober 2003 - 14:28
#15
I så fald vil den jo være ugyldig hvis du skifter active doc
23. oktober 2003 - 14:58
#16
Rigtigt.. men det gør den så ikke. Kører altid med samme dokument
28. november 2003 - 10:12
#17
jpk svar lige -så får du point.. Forresten kan jeg fortælle dig at jeg sendte en pointer med en WM besked og låste via en semaphore count
28. november 2003 - 10:32
#18
Tak skal du ha'...
Kurser inden for grundlæggende programmering