<?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[shared sections]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mich in letzter Zeit ein bisschen mit DLLs beschäftigt.</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)
DWORD test = 0;	
#pragma data_seg ()
</code></pre>
<p>das funktioniert. Über ein entsprechendes .def-File, teilen sich alle Instanzen der DLL die Variable <em>test</em>.</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)
std::set&lt;std::string&gt; container;
#pragma data_seg ()
</code></pre>
<p>Hier liegt mein Problem. Die verschiedenen Instanzen scheinen - trotz <em>.shared</em> - verschiedene <em>container</em> zu benutzen.</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)		
std::set&lt;std::string&gt;* container = NULL;
#pragma data_seg ()

...

/* in einer Init-Funktion */
if(setModules==NULL) setModules = new std::set&lt;std::string&gt;;
</code></pre>
<p>Nach dieser Vorgehnsweise teilen sich alle Instanzen den Inhalt des Containers, aber nur unter XP. Unter Windows ME funktioniert das nicht.</p>
<p>Vielleicht ist der Ansatz ja komplett falsch. Aber ich kann mir das momentan nicht anders vorstellen. Wäre für jede Hilfe dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138861/shared-sections</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 01:04:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138861.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Mar 2006 22:21:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to shared sections on Wed, 01 Mar 2006 22:21:02 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mich in letzter Zeit ein bisschen mit DLLs beschäftigt.</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)
DWORD test = 0;	
#pragma data_seg ()
</code></pre>
<p>das funktioniert. Über ein entsprechendes .def-File, teilen sich alle Instanzen der DLL die Variable <em>test</em>.</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)
std::set&lt;std::string&gt; container;
#pragma data_seg ()
</code></pre>
<p>Hier liegt mein Problem. Die verschiedenen Instanzen scheinen - trotz <em>.shared</em> - verschiedene <em>container</em> zu benutzen.</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)		
std::set&lt;std::string&gt;* container = NULL;
#pragma data_seg ()

...

/* in einer Init-Funktion */
if(setModules==NULL) setModules = new std::set&lt;std::string&gt;;
</code></pre>
<p>Nach dieser Vorgehnsweise teilen sich alle Instanzen den Inhalt des Containers, aber nur unter XP. Unter Windows ME funktioniert das nicht.</p>
<p>Vielleicht ist der Ansatz ja komplett falsch. Aber ich kann mir das momentan nicht anders vorstellen. Wäre für jede Hilfe dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006245</guid><dc:creator><![CDATA[DLLAnfänger]]></dc:creator><pubDate>Wed, 01 Mar 2006 22:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to shared sections on Wed, 01 Mar 2006 22:59:29 GMT]]></title><description><![CDATA[<p>ups, kleine Korrektur: in der Init-Funktion steht natürlich</p>
<pre><code class="language-cpp">if(container==NULL) container = new std::set&lt;std::string&gt;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1006269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006269</guid><dc:creator><![CDATA[DLLAnfänger]]></dc:creator><pubDate>Wed, 01 Mar 2006 22:59:29 GMT</pubDate></item><item><title><![CDATA[Reply to shared sections on Thu, 02 Mar 2006 07:49:30 GMT]]></title><description><![CDATA[<p>Sowas kann nicht funktionieren, da ja jeder Prozess seine eigene CRT verwendet und somit nicht auf gemeinsamen *dynamischen* Speicher zugeriffen werden kann! Und die STL verwendet dynamischen Speicher (also new).<br />
Mit den shared sections kannst Du nur &quot;statischen&quot; Speicher teilen. Wenn Du dynamischen Speicher teilen willst, dann musst Du MemoryMappedFiles nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006404</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 02 Mar 2006 07:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to shared sections on Thu, 02 Mar 2006 14:27:25 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Sowas kann nicht funktionieren, da ja jeder Prozess seine eigene CRT verwendet und somit nicht auf gemeinsamen *dynamischen* Speicher zugeriffen werden kann! Und die STL verwendet dynamischen Speicher (also new).</p>
</blockquote>
<p>Klingt einleuchtend. Aber wieso funktioniert das unter Windows XP:</p>
<pre><code class="language-cpp">#pragma data_seg (&quot;.shared&quot;)        
std::set&lt;std::string&gt;* container = NULL;
#pragma data_seg ()

...

/* in einer Init-Funktion */
if(container==NULL) container = new std::set&lt;std::string&gt;;
</code></pre>
<blockquote>
<p>Mit den shared sections kannst Du nur &quot;statischen&quot; Speicher teilen. Wenn Du dynamischen Speicher teilen willst, dann musst Du MemoryMappedFiles nehmen.</p>
</blockquote>
<p>Ok, danke.<br />
Mir ist aber noch nicht ganz klar ob - und wenn ja - wie man Container-Klassen der STL (mittels den FileMapping-Funktionen) <em>sharen</em> kann.<br />
Wahrscheinlich funktioniert das so direkt gar nicht und man muss das ganze erst hin und her konvertieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006860</guid><dc:creator><![CDATA[DLLAnfänger]]></dc:creator><pubDate>Thu, 02 Mar 2006 14:27:25 GMT</pubDate></item></channel></rss>