Veröffentlicht 27. Januar 201411 j 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:
27. Januar 201411 j 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.
27. Januar 201411 j Autor 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?
27. Januar 201411 j Deine CString-Instanz ist namenlos und temporär. Die lebt nur, bis die enthaltende Anweisung (in diesem Fall die Zuweisung an pszText) abgearbeitet ist.
27. Januar 201411 j Autor Hmm ok das erklärt das dann, hab mir eine "richtige" CString Variable angelegt und damit scheints zu funktionieren. Ich danke dir.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.