<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Eindeutige Objektkennung</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/</id><updated>2020-02-27T23:43:28.783000Z</updated><subtitle>Recent posts to Eindeutige Objektkennung</subtitle><entry><title>Eindeutige Objektkennung</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/?limit=25#9db6" rel="alternate"/><published>2020-02-27T23:43:28.783000Z</published><updated>2020-02-27T23:43:28.783000Z</updated><author><name>phieng</name><uri>https://forge.codesys.com/u/phieng/</uri></author><id>https://forge.codesys.comde505f0c5b8cbcc6f565145d1a9618310a64b43c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Die FB_Exit-Methode wird sicher nur einmal aufgerufen. &lt;/p&gt;
&lt;p&gt;Vielleicht ist dir aufgefallen, dass ich den THIS-Pointer vor der Uebergabe dereferenziere. Dies muss ich machen damit die RemoveObject-Methode unversell eingesetzt werden kann. Das Object wurde natürlich auch so in der Collection registriert.&lt;/p&gt;
&lt;p&gt;Der Uebergabe-Parameter ist als IObject-Interface definiert. Dieses Interface wird grundsätzlich von allen meinen Klassen implementiert.&lt;/p&gt;
&lt;p&gt;Ich vermute nun, dass der dereferenzierte THIS-Pointer je nach Ableitungsstufe nicht gleich ist.&lt;/p&gt;
&lt;p&gt;Gruss Philipp&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Eindeutige Objektkennung</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/?limit=25#ae2a" rel="alternate"/><published>2020-02-27T23:43:24.144000Z</published><updated>2020-02-27T23:43:24.144000Z</updated><author><name>Ralph Holz</name><uri>https://forge.codesys.com/u/ralph-holz/</uri></author><id>https://forge.codesys.com07d32f9434b27f5f1261fca362ad743b2f59651e</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hast du vielleicht in beiden Klassen FB_INIT und/oder FB_EXIT dann wirdin deiner abgeleiteten Klasse sowohl der Exit der Basis als auch der Exit deiner Klasse ausgeführt. Ich muß mich mal schlau machen in welcher Reihenfolge. Dann würdest du versuchen die gleiche instanz 2 mal zu deregistrieren, was natürlich nicht geht wenn sie schon weg ist.&lt;/p&gt;
&lt;p&gt;Gruß&lt;/p&gt;
&lt;p&gt;Ralph&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Eindeutige Objektkennung</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/?limit=25#ea11" rel="alternate"/><published>2020-02-27T23:43:22.497000Z</published><updated>2020-02-27T23:43:22.497000Z</updated><author><name>phieng</name><uri>https://forge.codesys.com/u/phieng/</uri></author><id>https://forge.codesys.come8da183a085836aa3e5579364f7aff9f4f89c69a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ralph Holz hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
Hallo,&lt;br/&gt;
das mit den unterschiedlichen Adressen kann eigentlich nur durch einen OnlineChange verursacht werden. Um deine Registrierungen wieder grade zu biegen mußt du die Methoden FB_INIT oder FB_REINIT verwenden beide werden aufgerufen wenn der FB seine Adressen ändert(siehe Hilfe). Also darin einfach den nutzlosen alten pointer deregistrieren und den neuen registrieren und alles ist schön.&lt;br/&gt;
Gruß&lt;br/&gt;
Ralph&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Es passiert tatsächlich beim OnlineChange. Ich habe viel mit den Init-Methoden experimentiert. Gerade mit grösseren Klassenhierarchien ist deren Handhabung nicht sehr transparent. Ich habe mich nun zu folgendem Vorgehen entschlossen:&lt;/p&gt;
&lt;p&gt;Beim Entladen (FB-Exit) werden die Instanzen deregistriert und ein Flag gesetzt, dass das Objekt online geändert wurde.&lt;/p&gt;
&lt;p&gt;Als zweiter Schritt wird per Programm wieder neu registriert.&lt;/p&gt;
&lt;p&gt;Mein Problem entsteht beim Entladen, die FB-Exit-Methode der SUPER-Klasse findet das von der Unterklasse registrierte Objekt nicht.&lt;/p&gt;
&lt;p&gt;Die FB-Exit-Methode sieht folgendermassen aus:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;bInCopyCode&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;gcsEnvironment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;NUL&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;tmpCollectionHandler&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;gcsEnvironment&lt;/span&gt;.&lt;span class="nv"&gt;getCollectionHandler&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;   &lt;/span&gt;
      &lt;span class="nv"&gt;tmpCollectionHandler&lt;/span&gt;.&lt;span class="nv"&gt;RemoveObject&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;
   &lt;span class="nv"&gt;hasBeenOnlineChanged&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;bInCopyCode&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hast Du eine Idee wo hier der Fehler ist?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Eindeutige Objektkennung</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/?limit=25#107a" rel="alternate"/><published>2020-02-27T23:43:20.852000Z</published><updated>2020-02-27T23:43:20.852000Z</updated><author><name>Ralph Holz</name><uri>https://forge.codesys.com/u/ralph-holz/</uri></author><id>https://forge.codesys.com16b4de23159cf034dae69ff152d30c1a8f034a24</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;das mit den unterschiedlichen Adressen kann eigentlich nur durch einen OnlineChange verursacht werden. Um deine Registrierungen wieder grade zu biegen mußt du die Methoden FB_INIT oder FB_REINIT verwenden beide werden aufgerufen wenn der FB seine Adressen ändert(siehe Hilfe). Also darin einfach den nutzlosen alten pointer deregistrieren und den neuen registrieren und alles ist schön.&lt;/p&gt;
&lt;p&gt;Gruß&lt;/p&gt;
&lt;p&gt;Ralph&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Eindeutige Objektkennung</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/5e73c78826/?limit=25#ffa8" rel="alternate"/><published>2020-02-27T23:43:16.245000Z</published><updated>2020-02-27T23:43:16.245000Z</updated><author><name>phieng</name><uri>https://forge.codesys.com/u/phieng/</uri></author><id>https://forge.codesys.combce389b766f3ae1c188ba67a55419b4d18999fcd</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Gegeben sei die folgende Klassenhierachie:&lt;/p&gt;
&lt;p&gt;ClassB extends ClassA;&lt;/p&gt;
&lt;p&gt;Die Instanzen werden in Listen verwaltet, dabei wird jeweils der THIS-Pointer eingetragen.&lt;/p&gt;
&lt;p&gt;Ich habe nun bemerkt, dass ich beim Suchen von Instanzen zum Teil keine Treffer bekomme. Grund ist dass der THIS-Pointer für die gleiche Instanz unterschiedliche Werte haben kann.&lt;/p&gt;
&lt;p&gt;Vermutlich macht es einen Unterschied ob der THIS-Pointer einer B-Instanz aus einer Methode der ClassA oder ClassB genommen wird.&lt;/p&gt;
&lt;p&gt;Gibt es eine eindeutige Instanz-ID, welche komplett unabhängig der Klassenhierachie ist?&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>