<?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[dll- Zugriffsverletzung nach Referenzübergabe]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin auf meiner Recherche auf dieses Forum gestossen und dachte mir, vielleicht kann mir hier jemand eine Hilfestellung zu einem Problem geben, welches mich gerade plagt.</p>
<p>Ich habe beispielhaft folgendes Struct erstellt:</p>
<pre><code class="language-cpp">struct SRow
{
	std::hash_map&lt;const char*, const char*&gt; field;
};
</code></pre>
<p>und eine Klasse:</p>
<pre><code class="language-cpp">class CTestStruct
{
public:
	CTestStruct(void);
	~CTestStruct(void);
	bool CTestStruct::sqlQuery(std::vector&lt;SRow*&gt;* v);
};
</code></pre>
<p>das CTestStruct::sqlQuery sieht nun folgendermaßen aus:</p>
<pre><code class="language-cpp">bool CTestStruct::sqlQuery(std::vector&lt;SRow*&gt;* v)
{
	int i;

	for (i = 0; i &lt; 10; ++i) {
		SRow *r = new SRow();
		r-&gt;field[&quot;test&quot;] = &quot;test&quot;;
		v-&gt;push_back(r);

	}
	return 1;
}
</code></pre>
<p>Soweit, so gut. Ich kann sie nun aus irgendeiner Klasse herraus so z.b. aufrufen:</p>
<pre><code class="language-cpp">CTestStruct testStr;

	std::vector&lt;SRow*&gt; *rows = new std::vector&lt;SRow*&gt;;

	testStr.sqlQuery(rows);
	SRow *r = rows-&gt;at(0);
	 std::cout &lt;&lt; r-&gt;field[&quot;test&quot;] &lt;&lt; std::endl;
</code></pre>
<p>Das funktioniert auch alles wunderbar. Nun beim Problem: Die Klasse CTestStruct soll in eine DLL. Ich gebe sie nach aussen hin mit dem Macro AFX_EXT_CLASS frei.</p>
<p>Wenn ich aber nun den obigen Code nutze um auf CTestStruct zuzugreifen bekomme ich an der Position <em>r-&gt;field[&quot;test&quot;]</em> einen Zugriffsfehler. Ich darf scheinbar nicht auf das struct zugreifen.</p>
<p>Es wäre suuper, wenn da jemand ein Tipp für mich hättte, vielen Dank!</p>
<p>Schuemi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190948/dll-zugriffsverletzung-nach-referenzübergabe</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 10:54:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190948.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Aug 2007 15:16:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Tue, 28 Aug 2007 15:16:14 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin auf meiner Recherche auf dieses Forum gestossen und dachte mir, vielleicht kann mir hier jemand eine Hilfestellung zu einem Problem geben, welches mich gerade plagt.</p>
<p>Ich habe beispielhaft folgendes Struct erstellt:</p>
<pre><code class="language-cpp">struct SRow
{
	std::hash_map&lt;const char*, const char*&gt; field;
};
</code></pre>
<p>und eine Klasse:</p>
<pre><code class="language-cpp">class CTestStruct
{
public:
	CTestStruct(void);
	~CTestStruct(void);
	bool CTestStruct::sqlQuery(std::vector&lt;SRow*&gt;* v);
};
</code></pre>
<p>das CTestStruct::sqlQuery sieht nun folgendermaßen aus:</p>
<pre><code class="language-cpp">bool CTestStruct::sqlQuery(std::vector&lt;SRow*&gt;* v)
{
	int i;

	for (i = 0; i &lt; 10; ++i) {
		SRow *r = new SRow();
		r-&gt;field[&quot;test&quot;] = &quot;test&quot;;
		v-&gt;push_back(r);

	}
	return 1;
}
</code></pre>
<p>Soweit, so gut. Ich kann sie nun aus irgendeiner Klasse herraus so z.b. aufrufen:</p>
<pre><code class="language-cpp">CTestStruct testStr;

	std::vector&lt;SRow*&gt; *rows = new std::vector&lt;SRow*&gt;;

	testStr.sqlQuery(rows);
	SRow *r = rows-&gt;at(0);
	 std::cout &lt;&lt; r-&gt;field[&quot;test&quot;] &lt;&lt; std::endl;
</code></pre>
<p>Das funktioniert auch alles wunderbar. Nun beim Problem: Die Klasse CTestStruct soll in eine DLL. Ich gebe sie nach aussen hin mit dem Macro AFX_EXT_CLASS frei.</p>
<p>Wenn ich aber nun den obigen Code nutze um auf CTestStruct zuzugreifen bekomme ich an der Position <em>r-&gt;field[&quot;test&quot;]</em> einen Zugriffsfehler. Ich darf scheinbar nicht auf das struct zugreifen.</p>
<p>Es wäre suuper, wenn da jemand ein Tipp für mich hättte, vielen Dank!</p>
<p>Schuemi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353916</guid><dc:creator><![CDATA[Schuemi]]></dc:creator><pubDate>Tue, 28 Aug 2007 15:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Tue, 28 Aug 2007 16:04:06 GMT]]></title><description><![CDATA[<p>Was heisst Du bekommst einen &quot;Zugriffsfehler&quot;? Stürtzt Dein Programm ab?</p>
<p>Wenn Du solche Klassen in DLLs auslagern willst, so *muss* die DLL die DLL-Version der CRT (und MFC, wenn verwendet) verwenden und mit dem *gleichen* VS-Compiler erzeugt worden sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353937</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 28 Aug 2007 16:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Tue, 28 Aug 2007 17:58:36 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Es kommt folgende Fehlermeldung:</p>
<p>Unbehandelte Ausnahme bei 0x102157d0 (msvcr71d.dll) in dllTest.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x00000000.<br />
Das Programm &quot;[3516] dllTest.exe: Systemeigen&quot; wurde mit Code -1073741819 (0xc0000005) beendet.</p>
<p>Und diese kommt, wenn der Befehl &quot;<em>r-&gt;field[&quot;test&quot;]</em>&quot; ausgeführt werden soll. Genauer gesagt bleibt er in Microsofts strlen.asm an einer stelle stehen, wo er versucht die länge des char* rauszukriegen. Ich nehme an, das ist einfach der erste versuch auf das char* zuzugreifen.</p>
<p>ich benutze VC++ 2003 .net, die DLL und das Testprogramm habe ich am selber rechner compeliert. Die CRT ist die von VC, ich denke nicht das die falsch sein könnte, oder doch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354009</guid><dc:creator><![CDATA[Schuemi]]></dc:creator><pubDate>Tue, 28 Aug 2007 17:58:36 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Wed, 29 Aug 2007 10:22:41 GMT]]></title><description><![CDATA[<p>Schuemi schrieb:</p>
<blockquote>
<p>Hi!</p>
<p>Es kommt folgende Fehlermeldung:</p>
<p>Unbehandelte Ausnahme bei 0x102157d0 (msvcr71d.dll) in dllTest.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x00000000.<br />
Das Programm &quot;[3516] dllTest.exe: Systemeigen&quot; wurde mit Code -1073741819 (0xc0000005) beendet.<br />
...</p>
</blockquote>
<p>Die STL von Microsoft ist leider nicht für den Export aus DLLs gedacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
(siehe <a href="http://support.microsoft.com/kb/168958/en-us" rel="nofollow">http://support.microsoft.com/kb/168958/en-us</a> ).<br />
Dort stehen auch Möglichkeiten mit denen Du Container aus einer DLL exportieren kannst. Mir war das zu aufwändig.<br />
Alternativ kannst Du auch eine andere STL Implementierung benutzen (STL-Port).</p>
<p>Grüsse<br />
karl-heinz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354406</guid><dc:creator><![CDATA[khrl01]]></dc:creator><pubDate>Wed, 29 Aug 2007 10:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Wed, 29 Aug 2007 10:34:22 GMT]]></title><description><![CDATA[<p>Hallö,</p>
<p>och nö... das ist ja ätzend. Ich probiere es mal mit der STL von Microsoft.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354414</guid><dc:creator><![CDATA[Schuemi]]></dc:creator><pubDate>Wed, 29 Aug 2007 10:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Wed, 29 Aug 2007 10:40:24 GMT]]></title><description><![CDATA[<p>Schuemi schrieb:</p>
<blockquote>
<p>Hallö,</p>
<p>och nö... das ist ja ätzend. Ich probiere es mal mit der STL von Microsoft.</p>
<p>Vielen Dank!</p>
</blockquote>
<p>hmmm... die STL von Microsoft funktioniert doch nicht, oder <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1354419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354419</guid><dc:creator><![CDATA[khrl01]]></dc:creator><pubDate>Wed, 29 Aug 2007 10:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Wed, 29 Aug 2007 10:44:52 GMT]]></title><description><![CDATA[<p>ich meine so, wie es auf der Seite <em>How to export an instantiation of a Standard Template Library (STL) class and a class that contains a data member that is an STL object</em> bei MS steht.</p>
<p>... oder ich nehme doch lieber STLport. Ist wohl einfacher und ich hätte warscheinlich weniger Probleme, das ganze doch mal auf Linux portieren muss...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354423</guid><dc:creator><![CDATA[Schuemi]]></dc:creator><pubDate>Wed, 29 Aug 2007 10:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Wed, 29 Aug 2007 11:09:30 GMT]]></title><description><![CDATA[<p>Du musst die *DLL*-Version der CRT verwenden!!!!! Siehe &quot;Projekteinstellungen|C/C++|Code generation|Runtime Library&quot; und dort muss was mit &quot;DLL&quot; stehen!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354456</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 29 Aug 2007 11:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to dll- Zugriffsverletzung nach Referenzübergabe on Wed, 29 Aug 2007 11:53:56 GMT]]></title><description><![CDATA[<p>jo, mache ich, ich nutze die Multithreaded-Debug-DLL (/MDd) als Laufzeitbibliothek in beiden Projekten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1354496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1354496</guid><dc:creator><![CDATA[Schuemi]]></dc:creator><pubDate>Wed, 29 Aug 2007 11:53:56 GMT</pubDate></item></channel></rss>