<?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[Probleme mit IStorage]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich möchte einige Programmeinstellungen persistent machen und verwende dazu eine Compound-File (Storage).</p>
<p>Diese Datei wurde mittels StgCreateDocFile (OLE2.dll) erzeugt.<br />
Mittel StgOpenStorage() wird bei Programmbeginn ein InterfacePointer auf IStorage zu dem File gesetzt: pIStorage. Der IO klappt auch, mit einem Haken:</p>
<p>Mit IStorage-&gt;CreateStream() wird ein Stream erzeugt, z.B.: &quot;ServerIP&quot; und dort eine IP abgelegt, z.B: &quot;127.0.0.1&quot;</p>
<p>Gespeichert wird aber tatsächlich nur: 127. also 4 Bytes <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Rufe ich mit einem HexViewer das File auf, sind darin auch tatsächlich nur die 127. gespeichert. Auch mit anderen Streams das Gleiche: Es werden nur vier Bytes gespeichert. Es muss also an der Routine liegen, die die Streams erzeugt und die Daten speichert, die sieht so aus:</p>
<pre><code>char           *bufferIp[18];
IStream        *pIStream;
HRESULT        hr;
ULARGE_INTEGER ins;

if(pIStorage) {
   hr = pIStorage-&gt;CreateStream(L&quot;ServerIP&quot;,
                      STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
                      0, 0, &amp;pIStream);
   if(hr == S_OK) {
      ins.QuadPart = 18;
      pIStream-&gt;SetSize(ins);
      hr = pIStream-&gt;Write(bufferIP, sizeof(bufferIP), NULL);
      pIStream-&gt;Release();
   }
}
</code></pre>
<p>bufferIP ist geprüft: Enthält String, sizeof returned die korrekte Zahl. Auch den<br />
Rückgabewert von Write habe ich geprüft: Der ist 4 ???? Der ist einfach<br />
immer nur 4.</p>
<p>What's wrong <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/116591/probleme-mit-istorage</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 04:29:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/116591.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Jul 2005 13:42:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit IStorage on Thu, 28 Jul 2005 13:42:13 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich möchte einige Programmeinstellungen persistent machen und verwende dazu eine Compound-File (Storage).</p>
<p>Diese Datei wurde mittels StgCreateDocFile (OLE2.dll) erzeugt.<br />
Mittel StgOpenStorage() wird bei Programmbeginn ein InterfacePointer auf IStorage zu dem File gesetzt: pIStorage. Der IO klappt auch, mit einem Haken:</p>
<p>Mit IStorage-&gt;CreateStream() wird ein Stream erzeugt, z.B.: &quot;ServerIP&quot; und dort eine IP abgelegt, z.B: &quot;127.0.0.1&quot;</p>
<p>Gespeichert wird aber tatsächlich nur: 127. also 4 Bytes <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Rufe ich mit einem HexViewer das File auf, sind darin auch tatsächlich nur die 127. gespeichert. Auch mit anderen Streams das Gleiche: Es werden nur vier Bytes gespeichert. Es muss also an der Routine liegen, die die Streams erzeugt und die Daten speichert, die sieht so aus:</p>
<pre><code>char           *bufferIp[18];
IStream        *pIStream;
HRESULT        hr;
ULARGE_INTEGER ins;

if(pIStorage) {
   hr = pIStorage-&gt;CreateStream(L&quot;ServerIP&quot;,
                      STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
                      0, 0, &amp;pIStream);
   if(hr == S_OK) {
      ins.QuadPart = 18;
      pIStream-&gt;SetSize(ins);
      hr = pIStream-&gt;Write(bufferIP, sizeof(bufferIP), NULL);
      pIStream-&gt;Release();
   }
}
</code></pre>
<p>bufferIP ist geprüft: Enthält String, sizeof returned die korrekte Zahl. Auch den<br />
Rückgabewert von Write habe ich geprüft: Der ist 4 ???? Der ist einfach<br />
immer nur 4.</p>
<p>What's wrong <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/840882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/840882</guid><dc:creator><![CDATA[RalphS]]></dc:creator><pubDate>Thu, 28 Jul 2005 13:42:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit IStorage on Thu, 28 Jul 2005 14:19:59 GMT]]></title><description><![CDATA[<p>bufferIP ist ein zeiger<br />
sizeof(zeiger) = 4 ! 32Bit OS vorausgesetzt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/840908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/840908</guid><dc:creator><![CDATA[RED-BARON]]></dc:creator><pubDate>Thu, 28 Jul 2005 14:19:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit IStorage on Thu, 28 Jul 2005 20:52:28 GMT]]></title><description><![CDATA[<p>sizeof(bufferIP)</p>
<p>gibt 17 zurück, weil *bufferIP mit *bufferIP[18] initialisiert ist. Den \0 bekomme ich Gott sei Dank nicht mit als Result geliefert.</p>
<p>Diese Deklaration entspricht:<br />
bufferIP = new char[18];</p>
<p>nur sie läuft auf einem ziemlich lokalen Heap.</p>
<p>Dennoch danke Man ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Die Lösung kann ich immer noch nicht ganz genau nachvollziehen. Aber es funktioniert jetzt, und das ist das wichtigste.</p>
<p>Das Problem war in meinen Fall tatsächlich das pIStream-&gt;Write() und dann<br />
anschließend das Pendant: pIStream-&gt;Read()</p>
<p>Das genaue Problem liegt in beiden innerhalb der Klammern, nämlich:</p>
<p>ULONG pcbRead als letzter Parameter.</p>
<p>Ich stetzte hier ein</p>
<p>ULONG comByteback;</p>
<p>Statts dann NULL habe ich den Resultwert wissen wollen und setzte den Pointer darauf im letzten Parameter an, also fragte ich: &amp;comByteback);<br />
Da ULONG eben vier Byte ist, bekam ich auch vier Bytes ;(((</p>
<p>seit ich überall nun NULL einsetze funkt es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und letztendlich:</p>
<p>Typisch Noob! Die Storage hat so reagiert, wie ich sie programmierte. Aber ich<br />
habe in den Details dieses einfach nicht mehr gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Ich habe immer<br />
darauf losgeschmiedet - ohne auf die arme Storage zu gucken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/841123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/841123</guid><dc:creator><![CDATA[RalphS]]></dc:creator><pubDate>Thu, 28 Jul 2005 20:52:28 GMT</pubDate></item></channel></rss>