Guybrush Threepwood Geschrieben 27. Januar 2014 Geschrieben 27. Januar 2014 Ich füge verschiedene Nodes in ein TreeView ein, manchmal wird jedoch beim Namen der letzte Buchstabe abgeschnitten, was ich mir nicht erklären kann. HTREEITEM CMyClass::AddFolder(MyComInterface::IFolder* pFolder, HTREEITEM hParent) { TV_INSERTSTRUCT tvinsert; memset(&tvinsert, 0, sizeof(tvinsert)); tvinsert.hParent = hParent; tvinsert.hInsertAfter = TVI_SORT; tvinsert.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_STATE; BSTR name = NULL; pFolder->get_Name(&name); tvinsert.item.pszText = CString(name).GetBuffer(); tvinsert.item.lParam = (LPARAM)pFolder; m_FolderList.push_back(pFolder); return TreeView_InsertItem(GetDlgItem(IDC_TREE1), &tvinsert); }[/PHP] Ursprünglich hab ich CW2A benutzt um den BSTR name in einen LPTSTR umzuwandeln, allerdings kam da in vielen Fällen Zeichensalat raus. Mit dem Umweg über den CString passiert das nicht mehr und wenn ich den Code im Debugger durchgehe steht in name und pszText das Gleiche drin mit allen Buchstaben. Im TreeView wird aber wie gesagt manchmal der letzte Buchstabe abgeschnitten :confused: Zitieren
Klotzkopp Geschrieben 27. Januar 2014 Geschrieben 27. Januar 2014 Der Zeiger, den CString::GetBuffer liefert, ist nur solange gültig, wie der dazugehörige CString lebt. Wenn du TreeView_InsertItem aufrufst, ist er also schon ungültig. Den BSTR leakst du übrigens. Zitieren
Guybrush Threepwood Geschrieben 27. Januar 2014 Autor Geschrieben 27. Januar 2014 Der Zeiger, den CString::GetBuffer liefert, ist nur solange gültig, wie der dazugehörige CString lebt. Wenn du TreeView_InsertItem aufrufst, ist er also schon ungültig. Den BSTR leakst du übrigens. Stimmt da fehlt noch ein SysFreeString für den BSTR. Das andere verstehe ich aber nicht. Müsste der CString nicht erst ungültig werden wenn die Funktion verlassen wird? Also nach dem return wenn der String schon ins TreeView eingefügt wurde? Zitieren
Klotzkopp Geschrieben 27. Januar 2014 Geschrieben 27. Januar 2014 Deine CString-Instanz ist namenlos und temporär. Die lebt nur, bis die enthaltende Anweisung (in diesem Fall die Zuweisung an pszText) abgearbeitet ist. Zitieren
Guybrush Threepwood Geschrieben 27. Januar 2014 Autor Geschrieben 27. Januar 2014 Hmm ok das erklärt das dann, hab mir eine "richtige" CString Variable angelegt und damit scheints zu funktionieren. Ich danke dir. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.