<?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[Access Violation.]]></title><description><![CDATA[<p>Schönen guten Morgen,</p>
<p>ich arbeite im Moment an einer DLL die eine weitere DLL benutzt. Das ist nötig da die 2. DLL nicht für threads geeignet ist, ich aber solche nutzen muss.</p>
<p>Beim Debuggen der eigenen DLL bekomme ich nun folgenden fehler:</p>
<blockquote>
<p>Nicht abgefangene Ausnahme in test2.exe (BSZIP.DLL): 0xC0000005: Access Violation.</p>
</blockquote>
<p>Wobei BSZIP.DLL die zweite, nicht selbstgeschriebene DLL ist.</p>
<p>Ich schließe nun nicht aus das ich Fehler in meiner Threadbehandlung gemacht habe, daher frage ich ob der folgende Code Fehlerhaft ist:</p>
<pre><code class="language-cpp">BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			hThread = _beginthread(init, 0, NULL);
			break;
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}
...
void  init(void*) {
	while (f.function&lt;0){
		Sleep(30);
	}
	if(f.function==0) {
		/*&gt;&gt;&gt; Hier tritt der Fehler auf &lt;&lt;&lt;*/
		f.result = zCompressFiles(f.tempDir, f.password, f.compressionMethod, f.resetArchiveAttribute, f.spanSize, f.comment, (fn_prototype_RTInfo)status);
		f.function = -1;
	}
	else {
		::MessageBox(NULL, &quot;Informationen konnten nicht geladen werden!&quot;,&quot;ERROR&quot;,MB_OK);
	}
	_endthread();
}
</code></pre>
<p>f.function wird später benutzt um zu entscheiden ob gepackt oder endpackt werden soll. Der Teil ist aber eher unwichtig, da das im moment ohnehin erstmal provisorisch ist.<br />
Die funktionen sind die einzigen in denen ich einen Thread benutze. Ist der Code so in Ordnung oder weiß jemand woher der Fehler sonst kommen könnte?</p>
<p>MFG Staati</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/131676/access-violation</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 03:05:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131676.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Jan 2006 08:41:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Access Violation. on Thu, 05 Jan 2006 08:41:32 GMT]]></title><description><![CDATA[<p>Schönen guten Morgen,</p>
<p>ich arbeite im Moment an einer DLL die eine weitere DLL benutzt. Das ist nötig da die 2. DLL nicht für threads geeignet ist, ich aber solche nutzen muss.</p>
<p>Beim Debuggen der eigenen DLL bekomme ich nun folgenden fehler:</p>
<blockquote>
<p>Nicht abgefangene Ausnahme in test2.exe (BSZIP.DLL): 0xC0000005: Access Violation.</p>
</blockquote>
<p>Wobei BSZIP.DLL die zweite, nicht selbstgeschriebene DLL ist.</p>
<p>Ich schließe nun nicht aus das ich Fehler in meiner Threadbehandlung gemacht habe, daher frage ich ob der folgende Code Fehlerhaft ist:</p>
<pre><code class="language-cpp">BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			hThread = _beginthread(init, 0, NULL);
			break;
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}
...
void  init(void*) {
	while (f.function&lt;0){
		Sleep(30);
	}
	if(f.function==0) {
		/*&gt;&gt;&gt; Hier tritt der Fehler auf &lt;&lt;&lt;*/
		f.result = zCompressFiles(f.tempDir, f.password, f.compressionMethod, f.resetArchiveAttribute, f.spanSize, f.comment, (fn_prototype_RTInfo)status);
		f.function = -1;
	}
	else {
		::MessageBox(NULL, &quot;Informationen konnten nicht geladen werden!&quot;,&quot;ERROR&quot;,MB_OK);
	}
	_endthread();
}
</code></pre>
<p>f.function wird später benutzt um zu entscheiden ob gepackt oder endpackt werden soll. Der Teil ist aber eher unwichtig, da das im moment ohnehin erstmal provisorisch ist.<br />
Die funktionen sind die einzigen in denen ich einen Thread benutze. Ist der Code so in Ordnung oder weiß jemand woher der Fehler sonst kommen könnte?</p>
<p>MFG Staati</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957424</guid><dc:creator><![CDATA[Staati]]></dc:creator><pubDate>Thu, 05 Jan 2006 08:41:32 GMT</pubDate></item><item><title><![CDATA[Reply to Access Violation. on Thu, 05 Jan 2006 08:49:25 GMT]]></title><description><![CDATA[<p>Hast Du mal die Doku zu &quot;DllMain&quot; gelesen?<br />
Darin sollte man wenn möglich gar nichts machen, oder wenn, dann nur solche Dinge die nur Funktionen der kernel32.dll verwenden!!!<br />
Und ich weiss ja nicht das _beginthread, zCompressFiles usw. alles macht...</p>
<p>Das Design musst Du ändern und eine eigene Init-Funktion in der DLL exportieren, welche Du aus der EXE aufrufen musst, wenn die DLL komplett geladen wurde.</p>
<p>Auch bezweifle ich, dass es möglich ist eine nicht-multi-thread-fähige Schnittstelle in eine solche zu verwandelt (ausser mit CSs).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957428</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 05 Jan 2006 08:49:25 GMT</pubDate></item><item><title><![CDATA[Reply to Access Violation. on Thu, 05 Jan 2006 10:38:39 GMT]]></title><description><![CDATA[<p>Threads sollen nicht aus der DllMain() gestartet werden.<br />
Das gilt für boost.thread, ist aber sicher auch für andere Librarys gültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957548</guid><dc:creator><![CDATA[pZy]]></dc:creator><pubDate>Thu, 05 Jan 2006 10:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to Access Violation. on Thu, 05 Jan 2006 12:53:47 GMT]]></title><description><![CDATA[<p>Danke für die Antworten!<br />
Ich habe eure Anmerkungen mal in die Tat umgesetzt, ändert nur leider nichts an der Fehlermeldung...</p>
<p>Das funktioniert so mit den Threads wie ich es gemacht habe, aber wenn Ihr sagt das man das nciht macht mach ich das auch nicht mehr <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>Ich vermute das der Fehler auftritt, weil die DLL möglicherweise selbst Threads verwendet und deshalb eine Zugriffsverletzung zu stande kommt...</p>
<p>Ich werde mir wohl etwas anderes überlegen müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957746</guid><dc:creator><![CDATA[Staati]]></dc:creator><pubDate>Thu, 05 Jan 2006 12:53:47 GMT</pubDate></item></channel></rss>