Nein, da scheint es ein Verständnisplroblem zu geben.
Bei AddItems werden die Items in die OPC Gruppe hinzugefügt. Die Funktion gibt als HR entweder S_OK oder S_False zurück. Wenn S_OK kommt ist alles gut gegangen, wenn S_False zurückkommt, ist es "teilweise" gut gegangen und dann musst du dir den pErrors anschauen (den bekommst du zurück es ist ein OUT Parameter). Da du mehrere Items in einem AddItems aufruf hinzufügen kannst, ist der pErrors ein Array mit Fehlercodes für jedes einzelne Item, das du hinzugefügt hast. Es könnte ja sein das von 20 Items, die du hinzufügst 18 funktioniert haben aber bei 2 hast du versehentlich eine falsche ItemID reingegeben, dann wäre für 18 Items der pErrors = S_OK aber für die zwei falschen ist der pErrors= E_OPC_InvalidItemID (falsche Syntax) oder für pErrors=E_OPC_UnknownItemID (richtige Syntax aber das Item gibt es nicht).
Tatsächlich wurden dann nur 18 und nicht alle 20 Items in die Gruppe hinzugefügt.
Und natürlich bekommst du dann für die 2 "defekten" Items auch keinen DataChange. Für welche Items ein DataChange gekommen ist, erkennst du anhand des ClientHandles. Das legst du bei AddItems selber fest (IN-Parameter) und beim DataChange gibt dir der Server dieses ClientHandle zurück (OUT-Parameter) damit du weißt welche deiner 18 Items sich geändert haben, denn es müssen sich ja nicht unbedingt alle Items gleichzeitig geändert haben (vielleicht nur 3, 7 und 15).