<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Typecast DWORD in Pointer]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgendes vor:<br />
ich möchte in einem CTreeCtrl zu einem Blatt Daten speichern.<br />
Bisher speichere ich dazu in dem HTREEITEM per SetItemData einen int-Wert und verknüpfe mit diesem int-Wert zu einem Array meiner Datenstruktur die zu dem HTREEITEM.<br />
Jetzt dachte ich mir, dass es doch viel eleganter wäre den Pointer auf eine solche Datenstruktur direkt in das DWORD zu speichern.<br />
Aus dieser Idee folgender Code:</p>
<pre><code>HTREEITEM eins = m_pTreeCtrl.InsertItem(&quot;Test&quot;);
TreeDates *test = new TreeDates;
//TreeDates hab ich mir selbst definiert
test-&gt;description=&quot;HALLO&quot;;
m_pTreeCtrl.SetItemData(eins, (DWORD)test);
</code></pre>
<p>Bis zu SetItemData klappt das alles noch. Jetzt würde ich gerne das DWORD per GetItemData wiedere auslesen, in einen Pointer auf TreeDates zurückcasten, damit ich dann die description wieder auslesen kann.<br />
Einfach nur das DWORD auf TreeDates casten funktioniert leider nicht...</p>
<p>Hat jemand ne Erklärung wie es geht oder warum es nicht gehen kann?</p>
<p>Danke Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205723/typecast-dword-in-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 03:29:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205723.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Feb 2008 12:16:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typecast DWORD in Pointer on Sun, 17 Feb 2008 12:28:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgendes vor:<br />
ich möchte in einem CTreeCtrl zu einem Blatt Daten speichern.<br />
Bisher speichere ich dazu in dem HTREEITEM per SetItemData einen int-Wert und verknüpfe mit diesem int-Wert zu einem Array meiner Datenstruktur die zu dem HTREEITEM.<br />
Jetzt dachte ich mir, dass es doch viel eleganter wäre den Pointer auf eine solche Datenstruktur direkt in das DWORD zu speichern.<br />
Aus dieser Idee folgender Code:</p>
<pre><code>HTREEITEM eins = m_pTreeCtrl.InsertItem(&quot;Test&quot;);
TreeDates *test = new TreeDates;
//TreeDates hab ich mir selbst definiert
test-&gt;description=&quot;HALLO&quot;;
m_pTreeCtrl.SetItemData(eins, (DWORD)test);
</code></pre>
<p>Bis zu SetItemData klappt das alles noch. Jetzt würde ich gerne das DWORD per GetItemData wiedere auslesen, in einen Pointer auf TreeDates zurückcasten, damit ich dann die description wieder auslesen kann.<br />
Einfach nur das DWORD auf TreeDates casten funktioniert leider nicht...</p>
<p>Hat jemand ne Erklärung wie es geht oder warum es nicht gehen kann?</p>
<p>Danke Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457487</guid><dc:creator><![CDATA[angelus05]]></dc:creator><pubDate>Sun, 17 Feb 2008 12:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Typecast DWORD in Pointer on Sun, 17 Feb 2008 13:53:27 GMT]]></title><description><![CDATA[<p>Der Cast auf ein DWORD ist eine schlechte Idee, damit baust Du für eine mögliche 64-bit Kompilierung unnötige Probleme. Unter x64 ist ein Zeiger größer als ein DWORD, welches auch unter x64 auf 32 Bit beschränkt bleibt. Richtig ist stattdessen die Verwendung von DWORD_PTR.</p>
<p>GetItemData gibt einen DWORD_PTR zurück, die Konvertierung auf Dein Element ist damit</p>
<pre><code class="language-cpp">TreeDates *test = reinterpret_cast&lt;TreeDates*&gt;(m_pTreeCtrl.GetItemData(eins));
</code></pre>
<p>und eigentlich genau das, was bei Dir nicht funktioniert. Gibt denn GetItemData einen gültigen Wert zurück?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457535</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Sun, 17 Feb 2008 13:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to Typecast DWORD in Pointer on Sun, 17 Feb 2008 14:51:36 GMT]]></title><description><![CDATA[<p>Habs grad ausprobiert.<br />
Anscheinend is mir vorhin die Fehlermeldung nicht aufgefallen.<br />
Denn ich krieg bei meinem Code zwar alles kompiliert und er zeigt mir mein Fenster auch an, aber ich krieg dann eine Meldung, dass die Anwendung ein Problem erzeugt und deshalb geschlossen werden muß - speicher ich testhalber einen int-Wert is die Meldung weg.<br />
Allerdings bevor das passiert klappt das zurücklesen des DWORDs und die Rückkonvertierung.</p>
<p>Aber an das Problem mit 64bit Anwendungen hab ich wirklich nicht gedacht...<br />
Also werd ich wohl doch den alten Weg gehen und mir in das DWORD einen int Wert speichern und über den Wert ein Element aus einem TreeDate-Array ansprechen.<br />
Aber Danke für die Hilfe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457564</guid><dc:creator><![CDATA[angelus05]]></dc:creator><pubDate>Sun, 17 Feb 2008 14:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Typecast DWORD in Pointer on Sun, 17 Feb 2008 18:43:05 GMT]]></title><description><![CDATA[<p>Das Speichern eines Zeigers über CTreeCtrl/CListCtrl.SetItemData ist schon der richtige Weg, das mache ich in meinen Anwendungen auch vielfach. Bei Dir scheint es daher an anderer Stelle zu haken. Da hilft leider nur eine umfangreiche Debugsitzung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457740</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:43:05 GMT</pubDate></item></channel></rss>