<?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[Erzwungene Friend Klasse]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Es gibt ja das friend statement. Dadurch kann man in einer Klasse festlegen, welche anderen Klassen volle Zugriffsrechte haben, auch auf private und protected. Ich hätte dies allerdings gerne andersrum. Ich möchte in einer Klasse deklarieren, dass dieser Klasse gewisse andere Klassen volle Zugriffsrechte geben. Mal ein wenig Code um es zu verdeutlichen:</p>
<pre><code class="language-cpp">class CTopSecret
{
    // ...
private:
    int m_nTopSecret;
}

class CAllesWissenWill
{
    // ...
    HasToBeAFriend CTopSecret;

    void Funktion(CTopSecret&amp; s) { s.nTopSecret *= 4; };
}
</code></pre>
<p>Gibt es da irgendeine Möglichkeit?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157942/erzwungene-friend-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 15:41:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157942.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Aug 2006 21:12:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 21:12:32 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Es gibt ja das friend statement. Dadurch kann man in einer Klasse festlegen, welche anderen Klassen volle Zugriffsrechte haben, auch auf private und protected. Ich hätte dies allerdings gerne andersrum. Ich möchte in einer Klasse deklarieren, dass dieser Klasse gewisse andere Klassen volle Zugriffsrechte geben. Mal ein wenig Code um es zu verdeutlichen:</p>
<pre><code class="language-cpp">class CTopSecret
{
    // ...
private:
    int m_nTopSecret;
}

class CAllesWissenWill
{
    // ...
    HasToBeAFriend CTopSecret;

    void Funktion(CTopSecret&amp; s) { s.nTopSecret *= 4; };
}
</code></pre>
<p>Gibt es da irgendeine Möglichkeit?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127984</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 30 Aug 2006 21:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 21:18:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//das ist öffentlich
class CTopSecret
{
    // ...
private:
    int m_nTopSecret;
};

//das schreibst du
class CTopSecretShadow
{
    // ...
public:
    int m_nTopSecret;
};

//und
class CAllesWissenWill
{
    // ...
    void Funktion(CTopSecret&amp; s) {
        CTopSecretShadow* tss=reinterpret_cast&lt;CTopSecretShadow*&gt;(&amp;s.nTopSecret);
        tss-&gt;m_nTopSecret *= 4; 
    };
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1127986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127986</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 30 Aug 2006 21:18:49 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 21:27:39 GMT]]></title><description><![CDATA[<p>Hmmm sowas habe ich mir auch schon überlegt. Aber es sind eben ca. 20 Klassen, welche auch eine Menge Inhalt haben. Ich hoffe oder hoffte, dass es da was einfacheres geben würde. Von jeder Klasse so eine Schattenklasse anzulegen, wäre ein ziemlicher Aufwand. Deshalb habe ich mal zuerst gefragt, ob es nicht was besseres gibt und deshalb frag ich jetzt nochmals, gibt es nicht was einfacheres? *g*</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127991</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 30 Aug 2006 21:27:39 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 21:42:16 GMT]]></title><description><![CDATA[<p>du könntest per hand die offsets der attribute ausbaldowern und</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class CTopSecret
{
    char dummy[43];
private:
    int m_nTopSecret;
public:
    CTopSecret()
    {
        m_nTopSecret=4711;
    }
};

int main()
{
    CTopSecret s;
	cout &lt;&lt; *(int*)((char*)&amp;s+44) &lt;&lt; '\n';
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1128001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128001</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 30 Aug 2006 21:42:16 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 21:45:54 GMT]]></title><description><![CDATA[<p>nur so ne idee gegen abtippenmüssen</p>
<pre><code class="language-cpp">#include alles, was TopSecret.h includet
namespace ich{
#define private public
#include &quot;TopSecret.h&quot;
#undef private
}
typedef ich::CTopSecret CTopSecretShadow;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1128004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128004</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 30 Aug 2006 21:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 23:02:37 GMT]]></title><description><![CDATA[<p>Das mit den richtigen Bytes auslesen, war meine allerste Idee. Fand ich aber sehr unschön und man muss immer auch genau wissen, wo was ist. Wenn sich bei der einen Klasse was verändert muss man es mit den Zahlen immer genau anpassen. Ein wenig mühsam nicht? ^^</p>
<p>Aber das mit der Idee zum Abtippen, find ich richtig gut. Muss ich dann Morgen unbedingt testen. Vielen Dank für die Hilfe. Ich berichte dann sicherlich ob es geklappt hat oder nicht ^^</p>
<p>Einzige Frage vielleicht:<br />
Wofür das Namespace? ^^</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128039</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 30 Aug 2006 23:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Wed, 30 Aug 2006 23:31:51 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Einzige Frage vielleicht:<br />
Wofür das Namespace? ^^</p>
</blockquote>
<p>damit du nicht aus versehen zwei definitionen der selben klasse leist, wo einmal so und einmal anders ist. das würde den compiler meschugge machen.<br />
wenn du aber eine im namcespace liest, könnte es gehen. dann ist ja die gesamte klasse im namespace und deswegen ne andewre klasse als die originale.</p>
<p>aber tut eigentlich nicht not.</p>
<pre><code class="language-cpp">#define TopSecret TopSecretShadow
#define private public
#include &quot;TopSecret.h&quot;
undev private
undef TopSecret
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1128042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128042</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 30 Aug 2006 23:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 08:08:40 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">#define private public
#include &quot;TopSecret.h&quot;
#undef private
</code></pre>
<p>...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Superhack !<br />
Gefällt mir !!</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128130</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 31 Aug 2006 08:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 09:02:40 GMT]]></title><description><![CDATA[<p>Ich bin mal vorsichtig und bezweifle, daß du damit etwas korrektes herausbekommst. Der Standard schreibt afaik vor, daß Member einer Schutzebene in der richtigen Reihenfolge im Speicher stehen, aber nicht, in welcher Reihenfolge die einzelnen Schutzebenen aufeinander folgen - da könnte dieses &quot;#define private public&quot; dir recht schnell die Anordnung der Member verändern (und da andere Teile des Programms mit der Originalklasse arbeiten, erhältst du womöglich Datenmüll).</p>
<p>Außerdem gibt es einen Grund, warum die Klasse selber sagen muß, WER ihr Freund ist - stell dir mal vor, jeder könnte ohne weiteres deine Freundschaft erzwingen, das würde das Schutzkonzept von C++ komplett nutzlos machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128170</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 31 Aug 2006 09:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 11:10:19 GMT]]></title><description><![CDATA[<p>Hmmmm,</p>
<p>ich weiß nicht, ob es für den Compiler sinnvoll wäre, diese Reinhenfolge zu verändern, weil sie immerhin der Initialisierungsreihenfolge entsprechen muß. Da wäre es für den Compiler sehr viel einfacher, die &quot;Gesamtreihenfolge&quot; zu bewahren - aber das ist nur eine Mutmaßung, weil ich nicht wirklich weiß, wie konkrete Compiler intern arbeiten.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>...<br />
Außerdem gibt es einen Grund, warum die Klasse selber sagen muß, WER ihr Freund ist - stell dir mal vor, jeder könnte ohne weiteres deine Freundschaft erzwingen, das würde das Schutzkonzept von C++ komplett nutzlos machen.</p>
</blockquote>
<p>Das ist bestimmt unbestritten !<br />
Hier geht es aber wirklich um &quot;Hacks&quot; für Untersuchungszwecke (hoffe ich) .... deswegen genügt es auch, die Attributreihenfolge im Speicher des konkreten Compilers herauszufinden.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128279</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 31 Aug 2006 11:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 11:16:31 GMT]]></title><description><![CDATA[<p>Hmmmm, also bei mir hat es nun funktioniert. Die Sache ist übrigens folgende. In diesem Programm arbeitet man nur mit den Shadowklassen. In einem anderen Programm arbeitet man mit den normalen. Die eigentlichen Klassen sind in einer DLL.</p>
<p>Ich weiss das ganze ist nicht wirklich sauber. Aber ich habe ein Programm, mit welchen man Dateien erzeugt. Und diese Dateien möchte ich gerne manchmal analysiseren, wenn irgendwelche Fehler im Hauptprogramm aufgetreten sind. Und ich kann doch eigentlich nur so, auf alle möglichen Variablen den Zugriff bekommen. Da wenn ein Fehler aufgetreten ist, ich den in der Datei auch korrigieren möchte, damit man diese nicht wegwerfen muss. Sind halt eine Menge Daten. Das bleibt aber ein Entwicklertool und wird natürlich nie ein Kunde zu sehen bekommen. Deswegen ist die Sicherheit auch Gewährleistet. <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128288</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 31 Aug 2006 11:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 11:28:16 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>sind denn diese generierten Klassen unveränderbar ? Also wir haben hier auch SW-Generatoren, aber die unterstützen alle entsprechende &quot;Userbereiche&quot;, in denen man eine &quot;showInternals()&quot;-Funktion implementieren könnte...<br />
Oder Du modellierst sie entsprechend rein (ich weiß nicht welches &quot;Programm die Klassen erzeugt&quot;).</p>
<p>Mit den hier genannten Methoden mußt Dir halt immer bewusst sein, dass die Ergebnisse dieser Analysen recht unzuverlässig sind. ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128298</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 31 Aug 2006 11:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 11:39:10 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>sind denn diese generierten Klassen unveränderbar ? Also wir haben hier auch SW-Generatoren, ...</p>
</blockquote>
<p>SW-Generatoren??</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>aber die unterstützen alle entsprechende &quot;Userbereiche&quot;, in denen man eine &quot;showInternals()&quot;-Funktion implementieren könnte...</p>
</blockquote>
<p>Ich habe in meinen Klassen keine Userbereiche, oder was meinst du? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Oder Du modellierst sie entsprechend rein (ich weiß nicht welches &quot;Programm die Klassen erzeugt&quot;).</p>
</blockquote>
<p>Die Klassen sind in einer DLL. Und ich möchte am liebsten nicht diesen Klassen die Möglichkeit geben sich jemandem vollständig mitzuteilen. Denn dies wäre dann wenn schon ein Sicherheitsrisiko <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="😉"
    /><br />
Aber eigentlich geht es darum, dass die DLL und das eigentliche Hauptprogramm völlig unabhängig vom Analysetool bleiben.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Mit den hier genannten Methoden mußt Dir halt immer bewusst sein, dass die Ergebnisse dieser Analysen recht unzuverlässig sind. ...</p>
</blockquote>
<p>Und wieso jetzt genau? Wenn etwas mit dem Speicherbereich nicht mehr stimmt fällt mir das schon auf, wenn da &quot;anscheinend&quot; irgendwelches Durcheinander in der entsprechenden Datei herrscht. Analysieren tue ich ja selber, das macht nicht das Programm ^^</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128303</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 31 Aug 2006 11:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 12:00:10 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Der Standard schreibt afaik vor, daß Member einer Schutzebene in der richtigen Reihenfolge im Speicher stehen</p>
</blockquote>
<p>was? wozu das denn? nee, das glaub ich net. würde ja ohne not jeden optimierer ausbremsen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128321</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 12:04:19 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Hmmmm, also bei mir hat es nun funktioniert.</p>
</blockquote>
<p>fein.</p>
<blockquote>
<p>Die Sache ist übrigens folgende. In diesem Programm arbeitet man nur mit den Shadowklassen.</p>
</blockquote>
<p>ändern wir mal den namen. shadow ist ein doofer namen und sagt zu wenig aus. ich bin für spy (englisch für spion).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128325</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 12:10:18 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>ich weiß nicht, ob es für den Compiler sinnvoll wäre, diese Reinhenfolge zu verändern, weil sie immerhin der Initialisierungsreihenfolge entsprechen muß.</p>
</blockquote>
<p>irrelevant. der compiler kennt die reihenfolge, wie die attribute im code stehen. das speicherlayout kann er anders machen.</p>
<pre><code class="language-cpp">struct test{
  char a;
  double b;
  char d;
};
</code></pre>
<p>sizeof(test) ergibt 24 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
klar besteht hier ein wenig umordnungsbedarf, das sollte der compiler auch von alleine dürfen.</p>
<pre><code class="language-cpp">Hier geht es aber wirklich um &quot;Hacks&quot; für Untersuchungszwecke (hoffe ich) .... deswegen genügt es auch, die Attributreihenfolge im Speicher des konkreten Compilers herauszufinden.
</code></pre>
<p>bestimmt wurde die dll mit dem gleichen compiler gemacht, wie die anwendung, daher hab ich ein gutes gewissen. und natürlich geht der code besser nicht in die produktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128334</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 12:42:20 GMT]]></title><description><![CDATA[<p>Hi Dravere,</p>
<p>da habe ich Dich wohl missverstanden.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>...Aber ich habe ein Programm, mit welchen man Dateien erzeugt....</p>
</blockquote>
<p>Das hatte ich verstanden als &quot;... ich habe ein Programm, mit welchem man Source-Dateien erzeugt ...&quot; und bin deswegen von einem Softwaregenerator ausgegangen. Wenn Du allerdings meinst, dass Du Dateien hast, in &quot;Daten liegen, mit denen ein Programm Objekte befüllt&quot;, liegt die Sache natürlich anders.</p>
<p>Aber dann habe ich Deine Aufgabenstellung noch weniger verstanden....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128368</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 12:44:42 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>...der compiler kennt die reihenfolge, wie die attribute im code stehen. das speicherlayout kann er anders machen. ...</p>
</blockquote>
<p>Dass er es <em>kann</em>, habe ich auch nicht bezweifelt. Ob es allerdings sinnvoll ist, weiß ich nicht. <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>volkard schrieb:</p>
<blockquote>
<p>...bestimmt wurde die dll mit dem gleichen compiler gemacht, wie die anwendung, ...</p>
</blockquote>
<p>Da bin ich mir nach Draveres letzten Posts nicht so sicher. Wenn er ein Programm schreiben will, was ein anderes (gekauftes ?) Programm emuliert, ist das gar nicht so wahrscheinlich.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128371</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 13:11:53 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Da bin ich mir nach Draveres letzten Posts nicht so sicher. Wenn er ein Programm schreiben will, was ein anderes (gekauftes ?) Programm emuliert, ist das gar nicht so wahrscheinlich.</p>
</blockquote>
<p>wenn du vor der dominanz des ms-compilers die augen nicht verschließt, ist es wieder wahrscheinlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128403</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 31 Aug 2006 13:11:53 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Thu, 31 Aug 2006 14:18:38 GMT]]></title><description><![CDATA[<p>Die DLL ist aber von mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Also für Simon2 nochmals, was ich genau machen will bzw. tue ^^</p>
<p>Ich habe ein Programm geschrieben, das absolute Hauptprogramm. Zu diesem Hauptprogramm gehört eine von mir geschriebene DLL, welche alle Klassen beinhaltet, welche in eine Datei gespeichert werden, wenn man die Daten aus dem Hauptprogramm abspeichern will. Mit der DLL kann man also, wenn du so willst, die abgespeicherte Datei lesen. Ist alles von mir programmiert. Das Hauptprogramm ist allerdings ein wenig was älter, wie auch die DLL. Das Programm ist aber ziemlich umfänglich und da ich eigentlich nur eine Testperson habe, kommen die Fehler immer nach und nach. Da das ganze eben auch ein wenig älter ist, ist es noch ein wenig schlechter programmiert. Und die Fehler treten durch falsche Zuweisung oder sogar falsche Funktionsaurufe auf. Nun sind in gewissen Klassen falsche Daten drin. Die Daten sind aber geschützt und man kommt nicht an diese ran. Also der prüft zum Beispiel ob Daten x vorhanden sind und gibt erst dann Daten y aus. Wenn jetzt aber ein Fehler passierte und beim Speichern in x nichts reingetan wurde, aber nur in y, kann man die Daten nicht mehr abrufen. Jetzt kann man also die Datei löschen und neu anlegen, was nicht unbedingt sehr angenehm wäre, da man sehr vieles neu eingeben müsste. Ist als wenn du 1000 Seiten in Word löschen müsstest um einen &quot;geschützten&quot; Buchstaben zu ändern <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>Daher möchte ich dieses Tool machen, um die Fehler 1. direkt zu sehen und 2. direkt in der Datei zu beheben.<br />
Und natürlich dann auch im Quellcode des Hauptprogramms oder der DLL <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>Jetzt verstanden?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128482</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 31 Aug 2006 14:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Fri, 01 Sep 2006 07:00:03 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Da bin ich mir nach Draveres letzten Posts nicht so sicher. Wenn er ein Programm schreiben will, was ein anderes (gekauftes ?) Programm emuliert, ist das gar nicht so wahrscheinlich.</p>
</blockquote>
<p>wenn du vor der dominanz des ms-compilers die augen nicht verschließt, ist es wieder wahrscheinlich.</p>
</blockquote>
<p>Hmmm, naja, die Programme, mit denen ich hauptsächlich zu tun habe, sind in der Mehrheit mit IBM-Compiler oder gcc gewandelt (allerdings stimmt natürlich, dass es sich dabei nicht um Windows-Anwendungen handelt) und nur die absolute Minderheit mit Microsoft (meist nur Mini-TestProgramme). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Deswegen bin ich halt nicht so drauf gekommen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128812</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 01 Sep 2006 07:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Fri, 01 Sep 2006 07:09:19 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Die DLL ist aber von mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Also für Simon2 nochmals, was ich genau machen will bzw. tue ^^<br />
...<br />
Jetzt verstanden?</p>
<p>Grüssli</p>
</blockquote>
<p>Ja !<br />
Vielen dank für Deine Erklärung ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Ich würde trotzdem versuchen, entweder mit Debugger oder mit Tracing zu arbeiten.</p>
<p>Für den Debugger muß man natürlich die Fehlersituationen einigermaßen rekonstruieren können - aber das gilt für Deine &quot;Überwachungsklassen&quot; auch. Eigentlich willst Du mit denen ja auch einen &quot;Debugger&quot; schreiben.</p>
<p>&quot;Tracingmöglichkeiten&quot; vorzusehen, ist eigentlich immer eine gute Idee, aber natürlich auch aufwendig - aber da Du anscheinend sowieso immer wieder das Programm anpasst (zur Fehlerbehebung), kannst Du das nach und nach erweitern.</p>
<p>Das Problem bei Deinen Hacks ist einfach, dass Du Dir nie ganz sicher sein kannst, ob das, was &quot;Dein Debugger&quot; Dir liefert, wirklich den Speicherinhalten entspricht, oder nur ein Problem mit Deinem Hack.</p>
<p>Aber ich denke, zu diesem Thema ist hier eigentlich alles gesagt und Du weißt alles, was Du brauchst.</p>
<p>Viel Erfolg und Spaß wünscht,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128813</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 01 Sep 2006 07:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Fri, 01 Sep 2006 08:38:01 GMT]]></title><description><![CDATA[<p>Welche IDE verwendest du denn?<br />
Mit dem MS Visual Studio kannst du doch direkt die DLL debuggen, in dem du sie ausführen läßt (natürlich als Debug-Version kompiliert) und dann gibst du beim Start das Hauptprogramm an und los geht's mit der Fehlersuche...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128868</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 01 Sep 2006 08:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to Erzwungene Friend Klasse on Fri, 01 Sep 2006 10:37:23 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Der Standard schreibt afaik vor, daß Member einer Schutzebene in der richtigen Reihenfolge im Speicher stehen</p>
</blockquote>
<p>was? wozu das denn? nee, das glaub ich net. würde ja ohne not jeden optimierer ausbremsen.</p>
</blockquote>
<p>Guckst du 9.2/12:</p>
<blockquote>
<p>Nonstatic data members of a (non-union) class declared without an<br />
intervening access-specifier are allocated so that later members have<br />
higher addresses within a class object. The order of allocation of<br />
nonstatic data members separated by an access-specifier is unspecified<br />
(11.1). Implementation alignment requirements might cause two adjacent<br />
members not to be allocated immediately after each other; so might<br />
requirements for space for managing virtual functions (10.3) and<br />
virtual base classes (10.1).</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1128942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128942</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 01 Sep 2006 10:37:23 GMT</pubDate></item></channel></rss>