<?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 String aus DLL zurückgeben]]></title><description><![CDATA[<p>Ich habe ein Programm und eine DLL die mir die Versionsnummer zurückgeben soll. Dort treten aber probleme auf. Sobald in der DLL auch eine Form mit VCL hinzugefügt wurde gibt es eine Fehlermeldung bei Versionsnummer auslesen.</p>
<blockquote>
<p>Zugriffsverletzung bei Adresse 0044B1A2 in Modul 'Mein Programm.exe'. Schreiben von Adresse 00BDA6DC</p>
</blockquote>
<p>Es reicht nur eine Form in die DLL einzubinden. Es muss nichts weiter damit gemacht werden. Nehem ich sie wieder raus geht alles. Warum??? Kann das nicht nachvollziehen.</p>
<p><strong>Programm</strong></p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
String ModulVersionFunktion(String PluginData)
{
  String Erg = 0;
  if(FileExists(PluginData))
  {
   TDLLModulVersion* DLLModulVersion;
   HINSTANCE h = LoadLibrary(PluginData.c_str());
   if(h != 0)
   DLLModulVersion = (TDLLModulVersion*)GetProcAddress(h, &quot;_ModulVersion&quot;);
   if(DLLModulVersion != NULL)
   Erg = DLLModulVersion();
   else
   Erg = 0;
   FreeLibrary(h);
  }
  return Erg;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  Caption = ModulVersionFunktion(ExtractFilePath(ParamStr(0)) + ListBox1-&gt;Items-&gt;Strings[ListBox1-&gt;ItemIndex]);
}
//---------------------------------------------------------------------------

in h
typedef String TDLLModulVersion();
</code></pre>
<p><strong>DLL</strong></p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec(dllexport) String ModulVersion()
{
  return &quot;v0.0.0.0&quot;;
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/168616/probleme-mit-string-aus-dll-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 12:55:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168616.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Dec 2006 15:26:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Mon, 25 Dec 2006 15:26:37 GMT]]></title><description><![CDATA[<p>Ich habe ein Programm und eine DLL die mir die Versionsnummer zurückgeben soll. Dort treten aber probleme auf. Sobald in der DLL auch eine Form mit VCL hinzugefügt wurde gibt es eine Fehlermeldung bei Versionsnummer auslesen.</p>
<blockquote>
<p>Zugriffsverletzung bei Adresse 0044B1A2 in Modul 'Mein Programm.exe'. Schreiben von Adresse 00BDA6DC</p>
</blockquote>
<p>Es reicht nur eine Form in die DLL einzubinden. Es muss nichts weiter damit gemacht werden. Nehem ich sie wieder raus geht alles. Warum??? Kann das nicht nachvollziehen.</p>
<p><strong>Programm</strong></p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
String ModulVersionFunktion(String PluginData)
{
  String Erg = 0;
  if(FileExists(PluginData))
  {
   TDLLModulVersion* DLLModulVersion;
   HINSTANCE h = LoadLibrary(PluginData.c_str());
   if(h != 0)
   DLLModulVersion = (TDLLModulVersion*)GetProcAddress(h, &quot;_ModulVersion&quot;);
   if(DLLModulVersion != NULL)
   Erg = DLLModulVersion();
   else
   Erg = 0;
   FreeLibrary(h);
  }
  return Erg;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  Caption = ModulVersionFunktion(ExtractFilePath(ParamStr(0)) + ListBox1-&gt;Items-&gt;Strings[ListBox1-&gt;ItemIndex]);
}
//---------------------------------------------------------------------------

in h
typedef String TDLLModulVersion();
</code></pre>
<p><strong>DLL</strong></p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec(dllexport) String ModulVersion()
{
  return &quot;v0.0.0.0&quot;;
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1197674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197674</guid><dc:creator><![CDATA[gjfj]]></dc:creator><pubDate>Mon, 25 Dec 2006 15:26:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Mon, 25 Dec 2006 20:45:12 GMT]]></title><description><![CDATA[<p>also hier kann ich den fehler nicht genau sagen, aber die verwendung der vcl in dlls kann oft zu problemen führen!</p>
<p>arbeite in den dlls doch lieber mit pods</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197778</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Mon, 25 Dec 2006 20:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Tue, 26 Dec 2006 12:53:22 GMT]]></title><description><![CDATA[<p>Sollte vieleicht noch dazu sagen das der String auch übergeben wird nur die Fehlermeldung kommt zusätzlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197973</guid><dc:creator><![CDATA[gjfj]]></dc:creator><pubDate>Tue, 26 Dec 2006 12:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Wed, 27 Dec 2006 22:19:25 GMT]]></title><description><![CDATA[<p>Habe die meldung jetzt mit try catch unterdrückt. Geht anscheinend nicht anders.</p>
<p>Trotzdem Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198751</guid><dc:creator><![CDATA[gjfj]]></dc:creator><pubDate>Wed, 27 Dec 2006 22:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Thu, 28 Dec 2006 14:31:43 GMT]]></title><description><![CDATA[<p>Wie sieht denn der Gültigkeitsbereich der Variable &quot;Erg&quot; aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199033</guid><dc:creator><![CDATA[BigNeal_]]></dc:creator><pubDate>Thu, 28 Dec 2006 14:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Sat, 30 Dec 2006 11:53:10 GMT]]></title><description><![CDATA[<p>Verdammt schlecht würde ich sagen. @gjfj: Ich hatte mir bis dato angewöhnt, bei DLLs mit reinen C-interfaces zu versehen, um die INteroperabilität mit anderen Anwendungen sicherzustellen. In so einem fall wäre der korrekte Weg eine Übergabe eines Zeiger welcher auf einen von der Applikation die die DLL verwendet allokierten Speicherbereich zeigt. Zusätzlich natürlich noch die Grösse des Speicherbereichs in Byte. Deine DLL Funktion befüllt dann diesen Speicherbereich mit dem Resultat. Den Rückgabewert kannst du dann dazu verwenden, um zum Beispiel darauf aufmerksam zu machen, dass der reservierte Speicher zu klein war. Oder um einfach die überleibende Anzahl von Bytes zurück zu geben. Dies würde dann einen ersten aufruf mit einem NULL Zeiger ermöglichen um die korrekte Länge des Strings zu ermitteln.</p>
<p>Ansonsten fällt mir nur ein, dass beim Erzeugen von DLLs welche VCL-Klassen (wie String) verwenden noch oben im Kommentar was steht, man solle memmgr.lib oder sowas einbinden. Einfach mal genau das lesen, was schon in der Datei stand als Kommentar, wenn man eine DLL neu generiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199814</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sat, 30 Dec 2006 11:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Sat, 30 Dec 2006 17:01:17 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/760">@junix</a><br />
Habe das jetzt mal auf ShortString geändert.<br />
Bekomme aber immer die fehlermeldung, jedoch nur wenn ich vom Builder aus starte. Wenn ich die exe so starte komme keine meldung mehr. Habe gemerkt das dies daran liegt das ich die DLL mit UPX gepackt habe. Das schein wohl in diesem fall nicht so gut zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199976</guid><dc:creator><![CDATA[gjfj]]></dc:creator><pubDate>Sat, 30 Dec 2006 17:01:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Sat, 30 Dec 2006 19:56:23 GMT]]></title><description><![CDATA[<p>gjfj schrieb:</p>
<blockquote>
<p>Habe das jetzt mal auf ShortString geändert.</p>
</blockquote>
<p>Kein mir bekannter C-Datentyp. ALso kanns nur eine weitere VCL oder ne selbstgebastelte Klasse sein. Was wiederum die Frage aufwirft, wieso du nach obigen Ausführungen auf die Idee kommst, dass es plötzlich besser sein sollte?</p>
<blockquote>
<p>Bekomme aber immer die fehlermeldung, jedoch nur wenn ich vom Builder aus starte. Wenn ich die exe so starte komme keine meldung mehr.</p>
</blockquote>
<p>Könnte wohl daran liegen, dass nur wenn die Applikation in einem Debugger gestartet wird, welcher jeden Speicherzugriff verfolgt auch diagnostiziert werden kann, dass der Code scheisse baut. Lässt man diese Sandbox weg, macht die Applikation hald irgendwas das vielleicht zufällig richtig ist, das Verhalten aber definitiv unvorhersehbar bleibt. Also sei bitte so gut, und betreib keine Sympotmtherapie mit deiner applikation indem du nur die Fehlermeldungen unterdrückst...!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200055</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sat, 30 Dec 2006 19:56:23 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Sat, 30 Dec 2006 21:30:46 GMT]]></title><description><![CDATA[<p>OK, dann werde ich wohl noch ein bisschen Arbeit vor mir haben und lieber alles noch mal durchgehen. Gut fand ich das mit der unterdrückung auch nicht. Bedanke mich erstmal für die Hilfe aber den rest werde ich wohl nur alleine schaffen können. Das mit ShortString stand im Kommentar bei einer neu generierten DLL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200101</guid><dc:creator><![CDATA[gjfj]]></dc:creator><pubDate>Sat, 30 Dec 2006 21:30:46 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit String aus DLL zurückgeben on Sun, 31 Dec 2006 10:26:11 GMT]]></title><description><![CDATA[<p>Stand da nicht auch was zum Einbinden einer Lib?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1200213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1200213</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sun, 31 Dec 2006 10:26:11 GMT</pubDate></item></channel></rss>