<?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[Zugriffsverletzung, dynamisches Laden einer dll]]></title><description><![CDATA[<p>Hallo,</p>
<p>evtl. ist es ein Verständnis Problem von meiner Seite.<br />
Kann mir einer sagen warum das hier nicht funktioniert:</p>
<pre><code class="language-cpp">CPlugin* MyPlugin;
    if (!CreatePlugin(MyPlugin)) ShowMessage(&quot;Fehler&quot;);

    MyPlugin-&gt;Execute(); // hier kommt eine Zugriffsverletzung
</code></pre>
<pre><code class="language-cpp">bool __fastcall TForm1::CreatePlugin(CPlugin* MyPlugin)
{
    typedef CPlugin* TCreatePluginObject(void);
    TCreatePluginObject* CreatePlugInObject;

    AnsiString PluginName = &quot;loop_plugins\\TestLoop.dll&quot;;

    HINSTANCE h = LoadLibrary(PluginName.c_str()); //DLL laden.

    if (h != 0) {
        CreatePlugInObject = (TCreatePluginObject*)GetProcAddress(h, &quot;@CreatePlugInObject$qv&quot;);
    } else {
        ShowMessage(&quot;DLL Not found&quot;);
        return false;
    }
    if (CreatePlugInObject != NULL) {
        MyPlugin = CreatePlugInObject();
    } else {
        ShowMessage(&quot;Objekt not created&quot;);
        return false;
    }

    // DLL ist nun geladen und kann ausgeführt werden.

    // hier funktioniert es:
    MyPlugin-&gt;Execute();
    return true;
}
</code></pre>
<p>wenn ich das Objekt in einer Routine erzeuge und dort auch aufrufe klappt es.<br />
Wenn ich jedoch den Zeiger zurückgebe und dort aufrufe bekomm ich eine<br />
Zugriffsverletzung.</p>
<p>Wird das dynamische Objekt beim Verlassen der Routine gelöscht? Wie kann ich das<br />
verhindern?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/97428/zugriffsverletzung-dynamisches-laden-einer-dll</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 19:02:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/97428.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Jan 2005 18:34:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung, dynamisches Laden einer dll on Tue, 11 Jan 2005 04:11:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>evtl. ist es ein Verständnis Problem von meiner Seite.<br />
Kann mir einer sagen warum das hier nicht funktioniert:</p>
<pre><code class="language-cpp">CPlugin* MyPlugin;
    if (!CreatePlugin(MyPlugin)) ShowMessage(&quot;Fehler&quot;);

    MyPlugin-&gt;Execute(); // hier kommt eine Zugriffsverletzung
</code></pre>
<pre><code class="language-cpp">bool __fastcall TForm1::CreatePlugin(CPlugin* MyPlugin)
{
    typedef CPlugin* TCreatePluginObject(void);
    TCreatePluginObject* CreatePlugInObject;

    AnsiString PluginName = &quot;loop_plugins\\TestLoop.dll&quot;;

    HINSTANCE h = LoadLibrary(PluginName.c_str()); //DLL laden.

    if (h != 0) {
        CreatePlugInObject = (TCreatePluginObject*)GetProcAddress(h, &quot;@CreatePlugInObject$qv&quot;);
    } else {
        ShowMessage(&quot;DLL Not found&quot;);
        return false;
    }
    if (CreatePlugInObject != NULL) {
        MyPlugin = CreatePlugInObject();
    } else {
        ShowMessage(&quot;Objekt not created&quot;);
        return false;
    }

    // DLL ist nun geladen und kann ausgeführt werden.

    // hier funktioniert es:
    MyPlugin-&gt;Execute();
    return true;
}
</code></pre>
<p>wenn ich das Objekt in einer Routine erzeuge und dort auch aufrufe klappt es.<br />
Wenn ich jedoch den Zeiger zurückgebe und dort aufrufe bekomm ich eine<br />
Zugriffsverletzung.</p>
<p>Wird das dynamische Objekt beim Verlassen der Routine gelöscht? Wie kann ich das<br />
verhindern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/692679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/692679</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Tue, 11 Jan 2005 04:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung, dynamisches Laden einer dll on Mon, 10 Jan 2005 21:07:55 GMT]]></title><description><![CDATA[<p>wie sieht denn CreateLoopPlugin aus ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/692811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/692811</guid><dc:creator><![CDATA[AndreasW]]></dc:creator><pubDate>Mon, 10 Jan 2005 21:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung, dynamisches Laden einer dll on Tue, 11 Jan 2005 04:11:47 GMT]]></title><description><![CDATA[<p>CreateLoopPlugin = CreatePlugin das hab ich versehentlich falsch gepostet, sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/692937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/692937</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Tue, 11 Jan 2005 04:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung, dynamisches Laden einer dll on Tue, 11 Jan 2005 06:49:01 GMT]]></title><description><![CDATA[<p>Die Variablen MyPlugin im Hauptprogramm und in der Methode CreatePlugin sind nicht dieselben. MyPlugin ist innerhalb der Methode eine lokale Variable, d.h. was du mit dieser Variablen dort machst, hat keine Auswirkungen auf dein Hauptprogramm. Somit geht auch die Zuweisung der Instanz durch MyPlugin = CreatePlugInObject() nach dem Methodenende verloren.<br />
Du must also sicherstellen, dass du die Adresse der Instanz der Variablen des Hauptprogramms zuweist. Mir fallen da folgende Versionen ein:<br />
1. Gib die Adresse als Rückgabewert der Methode zurück und weise es dort der Variablen MyPlugin des Hauptprogramms zu.<br />
2. Übergib die Variable MyPlugin als Referenz, d.h. CPlugin* &amp;MyPlugin.<br />
3. Übergib einen Zeiger auf die Zielvariable MyPlugin, d.h.CPlugin** MyPlugin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/692957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/692957</guid><dc:creator><![CDATA[warp]]></dc:creator><pubDate>Tue, 11 Jan 2005 06:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung, dynamisches Laden einer dll on Tue, 11 Jan 2005 19:07:04 GMT]]></title><description><![CDATA[<p>vielen Dank! So klappt es <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="🙂"
    /> <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/693564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/693564</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Tue, 11 Jan 2005 19:07:04 GMT</pubDate></item></channel></rss>