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 fra DE-CIX
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