<?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 und BCB]]></title><description><![CDATA[<p>hi,</p>
<p>wenn ich mit dem BCB ne DLL erstelle in der ich mit <strong>new[]</strong> Speicher reserviere für objekte die ich per zeiger an die DLL uebergebe, dann bekomme ich beim Freigeben des Speichers von Codeguard den Fehler 'Bad parameter'.</p>
<p>hier mal ein vereinfachtes (aber vom ablauf her identisches) beispiel:</p>
<pre><code class="language-cpp">struct MyObject
{
  unsigned char *Data;
  unsigned long  Size;
};

// in der DLL die exportierte funktion
void BlahFun(MyObject *Object)
{  
  Object.Data = new unsigned char[100];
  Object.Size = 100;
}

// in meinem programm
typedef void (*PFUN_DLL_BLAHFUN) (MyObject *Object);
PFUN_DLL_BLAHFUN BlahFun;

// DLL laden und Funktionszeiger holen
void __fastcall TForm1::ExecuteDLLFunction()
{
  HINSTANCE DLLInst = ::LoadLibrary(&quot;my.dll&quot;);
  BlahFun           = (PFUN_DLL_BLAHFUN) ::GetProcAddress(DLLInst, &quot;_BlahFun&quot;);

  // neues objekt vom typ MyObject anlegen
  MyObject Object;

  if (BlahFun)
    BlahFun(&amp;Object);

// -&gt; HIER KOMMT ES DANN ZUM FEHLER BEI CODE-GUARD
  delete [] Object.Data;
}
</code></pre>
<p>wenn ich die dynamisch RTL verwende (in der dll und im programm), dann kommt kein fehler.</p>
<p>kann ich diese dynamisch RTL nicht irgendwie umgehen? ich will nämlich nicht irgendwelche zusätzlichen borland-dlls beim anwender installieren müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/107516/dll-und-bcb</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 17:50:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/107516.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Apr 2005 10:26:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL und BCB on Wed, 20 Apr 2005 10:26:34 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>wenn ich mit dem BCB ne DLL erstelle in der ich mit <strong>new[]</strong> Speicher reserviere für objekte die ich per zeiger an die DLL uebergebe, dann bekomme ich beim Freigeben des Speichers von Codeguard den Fehler 'Bad parameter'.</p>
<p>hier mal ein vereinfachtes (aber vom ablauf her identisches) beispiel:</p>
<pre><code class="language-cpp">struct MyObject
{
  unsigned char *Data;
  unsigned long  Size;
};

// in der DLL die exportierte funktion
void BlahFun(MyObject *Object)
{  
  Object.Data = new unsigned char[100];
  Object.Size = 100;
}

// in meinem programm
typedef void (*PFUN_DLL_BLAHFUN) (MyObject *Object);
PFUN_DLL_BLAHFUN BlahFun;

// DLL laden und Funktionszeiger holen
void __fastcall TForm1::ExecuteDLLFunction()
{
  HINSTANCE DLLInst = ::LoadLibrary(&quot;my.dll&quot;);
  BlahFun           = (PFUN_DLL_BLAHFUN) ::GetProcAddress(DLLInst, &quot;_BlahFun&quot;);

  // neues objekt vom typ MyObject anlegen
  MyObject Object;

  if (BlahFun)
    BlahFun(&amp;Object);

// -&gt; HIER KOMMT ES DANN ZUM FEHLER BEI CODE-GUARD
  delete [] Object.Data;
}
</code></pre>
<p>wenn ich die dynamisch RTL verwende (in der dll und im programm), dann kommt kein fehler.</p>
<p>kann ich diese dynamisch RTL nicht irgendwie umgehen? ich will nämlich nicht irgendwelche zusätzlichen borland-dlls beim anwender installieren müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/771060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/771060</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Wed, 20 Apr 2005 10:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und BCB on Fri, 22 Apr 2005 09:56:40 GMT]]></title><description><![CDATA[<p>noch niemand was mit ner dll gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/772768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/772768</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Fri, 22 Apr 2005 09:56:40 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und BCB on Fri, 22 Apr 2005 10:58:04 GMT]]></title><description><![CDATA[<p>new und delete müssen immer in der selben Programmeinheit benutzt werden, also entweder beides im Hautprogramm oder beides in der DLL, aber NIEMALS(!!!) mischen.</p>
<p>Am besten du schreibst noch eine Delete-Funktion in die DLL, also</p>
<pre><code class="language-cpp">void DeleteObject(MyObject *Object)
{
  delete [] Object;
}
</code></pre>
<p>Außerdem müssen in der Funktion &quot;-&gt;&quot; hin:</p>
<pre><code class="language-cpp">void BlahFun(MyObject *Object)
{  
  Object-&gt;Data = new unsigned char[100];
  Object-&gt;Size = 100;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/772830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/772830</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 22 Apr 2005 10:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to DLL und BCB on Fri, 22 Apr 2005 11:48:39 GMT]]></title><description><![CDATA[<p>danke...</p>
<p>genauso werde ich das jetzt auch machen. ist alles ziemlich umstaendlich fuer meinen geschmack.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/772872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/772872</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Fri, 22 Apr 2005 11:48:39 GMT</pubDate></item></channel></rss>