Zeiger in CListCtrl speichern?

ich habe nun Zeiger vom Typ CFileItem (selbst geschriebene Klasse) in mein CListCtrl geschrieben. Die zeiger werden ja als Item.lParam gespeichert. Die zugehörige Funktion, die ein lParam wieder zurückliefert, soll nach der Visual Studio.NET Dokumentation die GetItemData() sein. Warum funktioniert dennoch folgender Code zum Auslesen des gespeicherten Zeigers nicht?!
Code:
for (int i = 0; i < m_listCtrl.GetItemCount(); i++){
	CFileItem *fileItem;
	DWORD_PTR dword = m_listCtrl.GetItemData(i);
	*fileItem = (CFileItem)dword;
}

Er bringt den Fehler: "cannot convert from DWORD_PTR to CFileItem" :confused:
 
Weil man da per Hand casten muss:

fileItem = (CFileItem*)dword;

Bei Casten von Adressen zu Objekt-Pointern geht das nur mit Pointern, du hast ja auch kein CFileItem in den Parameter reingeschrieben, sondern ein CFileItem*.

Übrigens, die CFileItem*, die du reingeschrieben hast, müsstest du auch irgendwo ge-new-et haben. Die musst du beim Schliessen des Dialoges auch alle selber wieder deleten, sonst gibt's Lecks!
 
Dankeschön. Nun klappt es bis zum cast. Ich lösche das Objekt auch am Ende. Danke für den Tipp wegen dem Speicher

Code:
for (int i = 0; i < m_listCtrl.GetItemCount(); i++){
	CFileItem *fileItem;
	DWORD_PTR dword = m_listCtrl.GetItemData(i);
	fileItem = (CFileItem*)dword;
	CString name = fileItem->GetName();
	TRACE(name);
	delete fileItem;
}

Aber er bringt folgenden Fehler:
"First-chance exception at 0x00417608 in FileExplorer.exe: 0xC0000005: Access violation reading location 0xfffffff0."

Kann jemand was damit anfangen?!
Ich nicht.
 
Zurück