<?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[VARIANT, msxml und die umwandlung]]></title><description><![CDATA[<p>nunja, ich denke, der threadtitel ist ein wenig verwirrend, deswegen hier mal in etwas ausführlicherer form:</p>
<p>ich lese über msxml eine xml datei aus, und hole mir am ende den wert der attribute mit</p>
<pre><code class="language-cpp">get_nodeValue(&amp;value);
</code></pre>
<p>wobei hier &quot;value&quot; vom typ VARIANT ist. Ich weiß, das VARIANT ein union ist, aber ich kann nicht angeben, welchen typ ich gerne benutzen würde.<br />
also wird am ende immer der typ &quot;BSTR&quot; beschrieben, was bisher auch kein größeres problem war, da ich es doch recht einfach in int, UINT oder was weiß ich umwandeln konnte.<br />
nur jetzt kommt ein problem, das ich farben auslesen möchte, und diese in DWORD variablen speichern. allerdings funktioniert hier die übliche umwandlung per &quot;atoi&quot; oder &quot;atol&quot; nicht, da immer falsche werte bei der variable ankommen (beim steppen habe ich festgestellt, das value.bstr den richtigen wert enthält, also muss irgendwas bei der umwandlung schief laufen.<br />
gibt es eine möglichkeit, dem parser mitzuteilen, das er eben den ULONG wert beschreiben soll, und nicht bstr?<br />
oder kann mir jemand sagen, warum atol bei DWORD nicht funktioniert?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296258/variant-msxml-und-die-umwandlung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 01:03:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296258.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Nov 2011 22:32:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Thu, 01 Dec 2011 16:13:59 GMT]]></title><description><![CDATA[<p>nunja, ich denke, der threadtitel ist ein wenig verwirrend, deswegen hier mal in etwas ausführlicherer form:</p>
<p>ich lese über msxml eine xml datei aus, und hole mir am ende den wert der attribute mit</p>
<pre><code class="language-cpp">get_nodeValue(&amp;value);
</code></pre>
<p>wobei hier &quot;value&quot; vom typ VARIANT ist. Ich weiß, das VARIANT ein union ist, aber ich kann nicht angeben, welchen typ ich gerne benutzen würde.<br />
also wird am ende immer der typ &quot;BSTR&quot; beschrieben, was bisher auch kein größeres problem war, da ich es doch recht einfach in int, UINT oder was weiß ich umwandeln konnte.<br />
nur jetzt kommt ein problem, das ich farben auslesen möchte, und diese in DWORD variablen speichern. allerdings funktioniert hier die übliche umwandlung per &quot;atoi&quot; oder &quot;atol&quot; nicht, da immer falsche werte bei der variable ankommen (beim steppen habe ich festgestellt, das value.bstr den richtigen wert enthält, also muss irgendwas bei der umwandlung schief laufen.<br />
gibt es eine möglichkeit, dem parser mitzuteilen, das er eben den ULONG wert beschreiben soll, und nicht bstr?<br />
oder kann mir jemand sagen, warum atol bei DWORD nicht funktioniert?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151282</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Thu, 01 Dec 2011 16:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Thu, 01 Dec 2011 16:12:47 GMT]]></title><description><![CDATA[<p>keiner ne idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151538</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Thu, 01 Dec 2011 16:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Fri, 02 Dec 2011 06:59:31 GMT]]></title><description><![CDATA[<p><sub>.</sub><br />
zu ungenau?</p>
<p>ich wandle im moment noch so um:</p>
<pre><code class="language-cpp">UINT x = atoi(bstr_t(value));
</code></pre>
<p>das funktioniert bestens, aber hier bekomme ich probleme</p>
<pre><code class="language-cpp">DWORD x = atol(bstr_t(value)); // value mit string 4278190080 für schwarz x hat danach dennoch den wert 2147483647
</code></pre>
<p>ich habe schon daran gedacht, das es evntl ein variable überlauf ist, allerdings stimmt dann der wert immer noch nicht ganz.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151764</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Fri, 02 Dec 2011 06:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Fri, 02 Dec 2011 07:04:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich weiß, das VARIANT ein union ist, aber ich kann nicht angeben, welchen typ ich gerne benutzen würde.<br />
also wird am ende immer der typ &quot;BSTR&quot; beschrieben, was bisher auch kein größeres problem war, da ich es doch recht einfach in int, UINT oder was weiß ich umwandeln konnte.</p>
</blockquote>
<p>da in einem union sich alle variablen den speicherplatz teilen, wird natürlch immer alles beschrieben.<br />
kannst du VARIANT mal posten?</p>
<p>es geht bestimmt auch via <code>variant_value.short_val</code> bzw. <code>variant_value.long_val</code> etc. (natürlich werden die variablen kaum so heißen, aber sollte es ja verdeutlichen...)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151765</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 02 Dec 2011 07:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Fri, 02 Dec 2011 07:14:15 GMT]]></title><description><![CDATA[<p>du meinst die komplette structur?</p>
<p>das wäre dann das:</p>
<pre><code class="language-cpp">typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;

struct tagVARIANT
    {
    union 
        {
        struct __tagVARIANT
            {
            VARTYPE vt;
            WORD wReserved1;
            WORD wReserved2;
            WORD wReserved3;
            union 
                {
                LONGLONG llVal;
                LONG lVal;
                BYTE bVal;
                SHORT iVal;
                FLOAT fltVal;
                DOUBLE dblVal;
                VARIANT_BOOL boolVal;
                _VARIANT_BOOL bool;
                SCODE scode;
                CY cyVal;
                DATE date;
                BSTR bstrVal;
                IUnknown *punkVal;
                IDispatch *pdispVal;
                SAFEARRAY *parray;
                BYTE *pbVal;
                SHORT *piVal;
                LONG *plVal;
                LONGLONG *pllVal;
                FLOAT *pfltVal;
                DOUBLE *pdblVal;
                VARIANT_BOOL *pboolVal;
                _VARIANT_BOOL *pbool;
                SCODE *pscode;
                CY *pcyVal;
                DATE *pdate;
                BSTR *pbstrVal;
                IUnknown **ppunkVal;
                IDispatch **ppdispVal;
                SAFEARRAY **pparray;
                VARIANT *pvarVal;
                PVOID byref;
                CHAR cVal;
                USHORT uiVal;
                ULONG ulVal;
                ULONGLONG ullVal;
                INT intVal;
                UINT uintVal;
                DECIMAL *pdecVal;
                CHAR *pcVal;
                USHORT *puiVal;
                ULONG *pulVal;
                ULONGLONG *pullVal;
                INT *pintVal;
                UINT *puintVal;
                struct __tagBRECORD
                    {
                    PVOID pvRecord;
                    IRecordInfo *pRecInfo;
                    } 	__VARIANT_NAME_4;
                } 	__VARIANT_NAME_3;
            } 	__VARIANT_NAME_2;
        DECIMAL decVal;
        } 	__VARIANT_NAME_1;
    } ;
</code></pre>
<p>und das aufrufen der einzelnen elemente habe ich ja auch schon probiert, aber da die typen sich<br />
1. grundlegend unterscheiden (string und int passen nicht)<br />
und 2. die typen nicht gleich groß sind<br />
kann man das eigentlich auch vergessen, wenn das gewünschte element nicht expliziet beschrieben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151767</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Fri, 02 Dec 2011 07:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Fri, 02 Dec 2011 08:22:54 GMT]]></title><description><![CDATA[<p>Ich denke, das ist eigentlich ein Thema fürs Winapi-Unterforum. Schau die mal <a href="http://msdn.microsoft.com/en-us/library/48a51e32-95d7-4eeb-8106-f5043ffa2fd1%28VS.85%29" rel="nofollow">VariantChangeType</a> bzw. <a href="http://msdn.microsoft.com/en-us/library/hc25t012%28v=vs.71%29.aspx" rel="nofollow">_wtoi64</a> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151783</guid><dc:creator><![CDATA[__cu]]></dc:creator><pubDate>Fri, 02 Dec 2011 08:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Fri, 02 Dec 2011 11:17:32 GMT]]></title><description><![CDATA[<p>ok, danke, variantchangetype war der richtige schubs in die gewollte richtung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
ich gehe davon aus, dass das nutzen von variantchangetype billiger ist als das 2. malige casten durch</p>
<pre><code class="language-cpp">atoi(bstr_t(value));
</code></pre>
<p>sehe ich das richtig so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151887</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Fri, 02 Dec 2011 11:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to VARIANT, msxml und die umwandlung on Fri, 02 Dec 2011 11:48:25 GMT]]></title><description><![CDATA[<p>ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2151901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2151901</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 02 Dec 2011 11:48:25 GMT</pubDate></item></channel></rss>