<?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[Programm mit DLL weitergeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>also mein programm (einige threads ja schon gestellt) ist soweit fertig, funktioniert auch wuederbar bei mir!</p>
<p>wenn ich es jedoch weitergeben will habe ich ein problem:</p>
<p>ich habe batürlich bei allen projekten (hauptprogramm und dlls) dynamische linker und laufzeitpackages deaktiviert, und bekomme nun ein haufen InvalidPointer Exception usw!</p>
<p>woran liegt das bzw wie kann ich das beheben?</p>
<p>habe wirklich sonst nix an dem funktionierenden projekt verändert, nur die 2 häckchen überall entfernt!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160795/programm-mit-dll-weitergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 10:12:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160795.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Sep 2006 12:10:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Fri, 29 Sep 2006 12:10:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also mein programm (einige threads ja schon gestellt) ist soweit fertig, funktioniert auch wuederbar bei mir!</p>
<p>wenn ich es jedoch weitergeben will habe ich ein problem:</p>
<p>ich habe batürlich bei allen projekten (hauptprogramm und dlls) dynamische linker und laufzeitpackages deaktiviert, und bekomme nun ein haufen InvalidPointer Exception usw!</p>
<p>woran liegt das bzw wie kann ich das beheben?</p>
<p>habe wirklich sonst nix an dem funktionierenden projekt verändert, nur die 2 häckchen überall entfernt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146521</guid><dc:creator><![CDATA[sdsds]]></dc:creator><pubDate>Fri, 29 Sep 2006 12:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Fri, 29 Sep 2006 12:36:46 GMT]]></title><description><![CDATA[<p>hm...habe gemerkt, das wenn ich nur bei den dlls die häckchen entferne, und im hauptprogramm selbst sie dranlasse geht es!</p>
<p>also hat es wohl nix mit den dlls zu tun?</p>
<p>Die zugriffsverletzung wird beim OpenDialog gewurfen:<br />
genaue stelle habe ich mit kommentar markiert!</p>
<pre><code class="language-cpp">void __fastcall TForm1::ffnen1Click(TObject *Sender)
{
if(OpenDialog1-&gt;Execute())
   {
     page = 0;
     //!!!Speicher und vectoren immer virher freigeben
     Memo1-&gt;Lines-&gt;Clear();
     delete VDAList;
     VDAList = new TStringList();
     DeleteVectorList(vList);
     posiVector.clear();
     startStopVector.clear();

     VDAList-&gt;LoadFromFile(OpenDialog1-&gt;FileName);  //HIER WIRD DANN EXCEPTION GEWURFEN
     ShowMessage(&quot;Test&quot;);
     FindPositions(VDAList,posiVector);
     /*for(unsigned int i = 0;i&lt;posiVector.size();++i)
        Memo1-&gt;Lines-&gt;Add(String(posiVector.at(i)));  */

     FillPosiVector(VDAList,posiVector,startStopVector);
     /*for(int i = 0; i &lt; startStopVector.size(); ++i)
        {
         Memo1-&gt;Lines-&gt;Add(&quot;Feld# &quot; + String(i) + &quot; Anfang: &quot; + String(startStopVector.at(i).first)
                           + &quot; Ende: &quot; + String(startStopVector.at(i).second));
        }        */
     FillVectorList(VDAList,vList,posiVector,startStopVector);
     /*for(int i = 0; i &lt; vList.size(); ++i)
        {
         Memo1-&gt;Lines-&gt;Add(&quot;Inhalt Area &quot; + String(i));
         Memo1-&gt;Lines-&gt;Add(vList.at(i)-&gt;Text);
        }                */
     Memo1-&gt;Lines-&gt;Add(&quot;---------------------------------------------------&quot;);
     ShowData();
   }
}
//---------------------------------------------------------------------------
</code></pre>
<p>jemand eine idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146550</guid><dc:creator><![CDATA[ssdfsdsds]]></dc:creator><pubDate>Fri, 29 Sep 2006 12:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Fri, 29 Sep 2006 12:40:39 GMT]]></title><description><![CDATA[<p>Du mußt dein Programm halt debuggen und versuchen rauszubekommen, wo diese Fehler auftreten. Falls dies nur auf einem fremden System ohne Builder auftritt, bau dir ein paar messageboxen ein um den Programmablauf verfolgen zu können.<br />
Noch mal. Es ist immer eine schlechte Idee STL-Klassen an Dlls zu übergeben oder von dort zu übernehmen. Das gleich trifft auch auf die meisten VCL-Klassen zu (z.Bsp. AnsiString). Versuche wenn es geht für die Übergaben nur PODs bzw. eigene Klassen, die nur PODs enthalten zu verwenden. Zum Theme AnsiString und dll steht ja was in der cpp, die der dll-Experte des Builders erstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146552</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 29 Sep 2006 12:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Fri, 29 Sep 2006 16:00:42 GMT]]></title><description><![CDATA[<p>wie gesagt, der fehler tritt auf, wenn das 2te mal der OpenDialog benutzt wird, an der stelle wo ich die datei in die VDAList laden möchte!</p>
<p>Was meinst du mit pods?<br />
was würdest du mir empfehlen, wenn ich meine funktionen in der dll behalten muss, und diese auch auf stl und vcl komponenten zugreifen müssen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146667</guid><dc:creator><![CDATA[sdasdasd]]></dc:creator><pubDate>Fri, 29 Sep 2006 16:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Fri, 29 Sep 2006 16:20:47 GMT]]></title><description><![CDATA[<p>POD - plain old data<br />
Das sind all die alten Datentypen die man auch so aus C kennt (int, float, char, char*).</p>
<p>Versuche die dll so stark wie möglich zu kapseln und alle Übergaben eben mit PODs machen. Dann mußt du statt TStringList halt etwas wie char** nehmen. Du kannst solche Sachen ja in eigenen Klassen kapseln damit das Handling einfacher wird.<br />
Ich sage jetzt nicht, dass dein Fehler damit was zu tun hat, dazu weiß ich zu wenig.<br />
Sind bei dir irgendwelche Threads im Spiel? Besteht die Möglichkeit, dass einer der übergebenen Pointer ungültig wird (durch das Hauptprogramm) bevor die in der Dll liegende Funktion fertig abgearbeitet ist? Hast du die MEMMGR.LIB zu deinem Dll-Projekt hinzugefügt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146672</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 29 Sep 2006 16:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 06:37:52 GMT]]></title><description><![CDATA[<p>nein threads sind nicht im spiel!<br />
mem....lib ist überall drin und auch die brlndmm.dll ist mit dabei!</p>
<p>der fehler tritt nicht mehr auf, wenn ich das</p>
<pre><code class="language-cpp">delete VDAList;
</code></pre>
<p>weglasse!</p>
<p>aber wieso?</p>
<p>da ich ja danach direkt wieder speicher anfordere mit</p>
<pre><code class="language-cpp">VDAList = new TStringList();
</code></pre>
<p>was ist daran falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148987</guid><dc:creator><![CDATA[sdsd]]></dc:creator><pubDate>Wed, 04 Oct 2006 06:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 06:39:05 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:</p>
<p>wie könnte ich eine klasse gut implementieren? in die dll?<br />
im hauptprogramm?</p>
<p>und wie kann ich eine gute schnittstelle für zB TStringList schreiben?<br />
(wollte ja eigentlich die manuelle speicherverwaltung mit vector und Stringlist umgehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148988</guid><dc:creator><![CDATA[sas]]></dc:creator><pubDate>Wed, 04 Oct 2006 06:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 09:48:44 GMT]]></title><description><![CDATA[<p>und auch bei einem CLear() bekomme ich eine AccessViolation!</p>
<p>Kann ich denn ein delete oder Clear() vor dem neuen Laden aus einer Datei einfach weglassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149095</guid><dc:creator><![CDATA[sdsdsd]]></dc:creator><pubDate>Wed, 04 Oct 2006 09:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 09:50:01 GMT]]></title><description><![CDATA[<p>Wo rufst du denn dein delete auf. Du mußt noch wissen, das Instanzen die mit new erstellt worden sind, immer in derselben Übersetzungseinheit (ist hier vielleicht nicht das richtige Wort) wieder gelöscht werden müssen. D.h. was du in der dll mit new erstellst, mußt du auch in der dll wieder löschen. Wenn du es im Hauptprogramm lösche willst, mußt du eine Löschfunktion in die dll einbauen und dann exportieren.<br />
Für Stringexporte habe ich mir eine eigen kleine Klasse geschrieben, die nichts weiter hat als die <a href="http://tutorial.schornboeck.net/bigthree.htm" rel="nofollow">großen 3</a> (für die Klasse und für const char*) sowie eine c_str() für Rückkonvertierungen. Als Ersatz für TStringList könnte man dann ein Array davon nehmen. Man braucht das ja nur für die Übergabe, intern kann man ja wieder mit den gewohnten Klassen Arbeiten.</p>
<pre><code class="language-cpp">// LightString.h: Einfache Stringklasse (für dlls)
//
//////////////////////////////////////////////////////////////////////
#if !defined(LightString_H_)
#define LightString_H_

#include &lt;algorithm&gt;

class LightString
{
private:
    void Swap(LightString&amp; src)
    {
      std::swap(buf, src.buf);
      std::swap(used, src.used);
    }

public:
  LightString() : buf(0), used(0)
  {
  }
  LightString(const char* src) : buf(0), used(0)
  {
    if( src != 0)
    {
      size_t newlen = strlen(src);
      try
      {
        buf = new char[newlen+1];
        std::copy(src, src + newlen, buf);
        buf[newlen] = '\0';
        used = newlen+1;
      }
      catch(...)
      {
        buf = 0;
        used = 0;
      }
    }
  }
  ~LightString()
  {
    delete[] buf;
  }
  size_t size() { return used-1; }
  LightString(const LightString&amp; src) : buf(src.used &gt; 0 ? new char[src.used] : 0), used(src.used)
  {
    if( src.used &gt; 0 )
        std::copy(src.buf, src.buf + src.used, buf);
  }
  LightString&amp; operator=(const LightString&amp; src)
  {
    if( this != &amp;src)
    {
      LightString temp(src);
      Swap(temp);
    }
    return *this;
  }
  LightString&amp; operator=(const char* src)
  {
    LightString temp(src);
    Swap( temp );
    return *this;
  }
  const char* c_str() const
  {
    if( used &gt; 0 ) return buf;
    return &quot;&quot;;
  }
  void clear()
  {
    delete[] buf;
    buf = 0;
    used = 0;
  }
private:
  char* buf;
  size_t used;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1149096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149096</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 04 Oct 2006 09:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 10:02:49 GMT]]></title><description><![CDATA[<p>also deklaration imn header</p>
<pre><code class="language-cpp">TStringList* VDAList;
</code></pre>
<p>speicher holen im konstruktor der form</p>
<pre><code class="language-cpp">VDAList = new TStringList;
</code></pre>
<p>speicher freigeben hab ich an mehreren stellen versucht (destruktor der form, direkt nach beendigung der arbeit mit der liste...alles mögliche)</p>
<p>ich verstehe es nicht!</p>
<p>diese TStringList ist die einzigste die wirklich nur Hauptprogramm verwendet wird (in den DLLs nur um sachen zu lesen, nicht schreiben)</p>
<p>und wenn ich vor dem laden aus der datei ein Clear() oder delete mache (danach natürlich wieder speicher holen), und dann das LoadFromFile() ein 2tes mal ausführe, bekomm ich die AccessViolation, lasse ich das delete oder Clear() weg, geht es erstmal (bekomme dann später eine AccessViolation)</p>
<p>worann kann es denn noch liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149109</guid><dc:creator><![CDATA[ssdfsdsds]]></dc:creator><pubDate>Wed, 04 Oct 2006 10:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 10:14:27 GMT]]></title><description><![CDATA[<p>ahh es liegt wohl doch wo anders dran, und zwar wirklich beim löschen eines vectors mit einer funktion aus der dll</p>
<pre><code class="language-cpp">//vector füllen
__declspec(dllexport)void FillVectorList(TStringList* List,std::vector&lt;TStringList* &gt;&amp; listVector, std::vector&lt;int&gt;&amp; iVec, std::vector&lt;std::pair&lt;int,int&gt; &gt;&amp; pVec)
{
  TStringList* seperateList;
  int vstart, vstop;

  for(int i = 0; i &lt; iVec.size(); ++i)
     {
      vstart = pVec.at(i).first;
      vstop = pVec.at(i).second;

      if(i == iVec.size()-1)
         vstop = pVec.at(i).second - 1;

      seperateList = new TStringList();

      for(int i = vstart; i &lt;= vstop; ++i)
         seperateList-&gt;Add(List-&gt;Strings[i]);

      listVector.push_back(seperateList);
     }
}
//vector wieder löschen
__declspec(dllexport)void DeleteVectorList(std::vector&lt;TStringList*&gt;&amp; listVector)
{
 std::vector&lt;TStringList*&gt;::iterator it;
 it = listVector.begin();

 for(it; it != listVector.end(); ++it)
  delete *it;

 listVector.clear();
}
</code></pre>
<p>fehler tritt nur auf, wenn davor das ausgeführt wurde (im Hauptprogramm)</p>
<pre><code class="language-cpp">DeleteVectorList(vList);
</code></pre>
<p>wo ist also in der funktion der fehler?<br />
oder sollte ich diese funktion lieber im hauptprogramm schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149112</guid><dc:creator><![CDATA[ssdfsdsds]]></dc:creator><pubDate>Wed, 04 Oct 2006 10:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 11:16:47 GMT]]></title><description><![CDATA[<p>Du mußt sicherstellen, dass die TStringList-Objekte ausschließlich in der dll erzeugt und gelöscht werden. Auch solltest du in der dll erzeugt StringListinstanzen nicht im Hauptprogramm ändern. Lieber erstmal kopieren.<br />
Am besten machst du das, indem du bei der Schnittstelle immer konstante Referenzen übergibst. Warum eigentlich diese Vermengung von STL und VCL? Tut es hier ein vector&lt;vector&lt;string&gt; &gt; nicht auch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149144</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 04 Oct 2006 11:16:47 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 11:25:41 GMT]]></title><description><![CDATA[<p>würde es hier etwas bringen, wenn ich es so mache?<br />
DLL</p>
<pre><code class="language-cpp">__declspec(dllexport)void DeleteVectorList(std::vector&lt;TStringList*&gt;&amp; listVector)
{
 std::vector&lt;TStringList*&gt;::iterator it;
 it = listVector.begin();

 for(it; it != listVector.end(); ++it)
  delete *it;

 listVector.clear();
}

__declspec(dllexport)void FillVectorList(TStringList* List,std::vector&lt;TStringList* &gt;&amp; listVector, std::vector&lt;int&gt;&amp; iVec, std::vector&lt;std::pair&lt;int,int&gt; &gt;&amp; pVec)
{
  TStringList* seperateList;
  int vstart, vstop;
  DeleteVectorList(listVector);   //hier das bereinigen des vectors

  for(int i = 0; i &lt; iVec.size(); ++i)
     {
      vstart = pVec.at(i).first;
      vstop = pVec.at(i).second;

      if(i == iVec.size()-1)
         vstop = pVec.at(i).second - 1;

      seperateList = new TStringList();

      for(int i = vstart; i &lt;= vstop; ++i)
         seperateList-&gt;Add(List-&gt;Strings[i]);

      listVector.push_back(seperateList);
     }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1149154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149154</guid><dc:creator><![CDATA[sadsadsadsa]]></dc:creator><pubDate>Wed, 04 Oct 2006 11:25:41 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 12:14:28 GMT]]></title><description><![CDATA[<p>Die Funktionen sind soweit in Ordnung. Wie werden sie denn im Hauptprogramm verwendet? Ich denke da liegt dann der Fehler. Wenn es zu viel wird, kannst du mir das projekt ja mal schicken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149195</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 04 Oct 2006 12:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 13:01:28 GMT]]></title><description><![CDATA[<p>naja sooo viel ist es nicht, aber relativ unübersichtlich, weil es noch so eine art test-entwicklung ist!</p>
<p>ich schicke es dir mal, wenn du was nicht verstehst, kannst gerne fragen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149243</guid><dc:creator><![CDATA[sadsadsadsa]]></dc:creator><pubDate>Wed, 04 Oct 2006 13:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Wed, 04 Oct 2006 13:16:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@braunstein</a>:<br />
hm...hab mich gerade angemeldet, bekomme aber meine mail net zum aktivieren!<br />
kannst du deine adresse mal hier reinschrieben?</p>
<p>oder hast ICQ?<br />
dann kannst mir die nummer an seb_schneider (at) gmx (punkt) de schicken!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149253</guid><dc:creator><![CDATA[sadsadsadsa]]></dc:creator><pubDate>Wed, 04 Oct 2006 13:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to Programm mit DLL weitergeben on Thu, 05 Oct 2006 08:48:15 GMT]]></title><description><![CDATA[<p>könnte mir viell CodeGuard helfen?<br />
wenn ja wie?<br />
habe es in den prjekt optionen aktiviert, und das DebugFenster geöffnet, allerdings wird nie etwas angezeigt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149727</guid><dc:creator><![CDATA[sadsadsadsa]]></dc:creator><pubDate>Thu, 05 Oct 2006 08:48:15 GMT</pubDate></item></channel></rss>