COM Automatisierung Anfängerproblem



  • Hallo,

    ich probiere gerade das Automatisierungsbeispiel des Buches "Jetzt lerne ich C++" aus. Dort gibt es einen Server mit einer automatisierten Methode, die eine MessageBox "Hallo" ausgibt. Diese kann von einem Client aus aufgerufen werden.

    Nun lege ich (im Server) innerhalb dieser Methode eine statische Variable an, um die Aufrufe zu zählen, also so:

    CMeldung::ShowMeldung()
    {
      static int cnt=0;
      char buf[ 100 ];
      sprintf( buf, "Hallo %d", cnt; );
      AfxMessageBox( buf );
    
      cnt++;
    }
    

    Wenn ich im Server die Funktion aufrufe, dann zählt er fleißig mit, rufe ich die Funktion jedoch von einem Client aus auf, bekomme ich jedesmal "Hallo 0".

    Was mache ich falsch?

    Danke,
    Echolon



  • Echolon schrieb:

    ...
    CMeldung::ShowMeldung()
    {
      static int cnt=0;
    ...
    

    Sieht für mich so aus als würde zu beginn jedes Funktionsaufruf der Wert
    von cnt auf 0 gesetzt.



  • Das Schlüsselwort static bedeutet doch, daß die Variable im Heap gespeichert wird und nur einmal beim Programmstart initialisiert wird. Es wird nicht bei jedem Funktionsaufruf neu initialisiert. Wenn ich die Funktion vom Server aus aufrufe, funktioniert das hochzählen.



  • Sorry, falsche Baustelle. 😃
    Was sagt denn dein Debugger dazu.



  • Der Server gibt den atuellen Stand einer statischen Variablen nicht preis. Stattdessen wird sie wie bei einem Programm-Neustart initialisiert. Wenn ich static int cnt=100;
    schreibe, bekomme ich "Hallo 100" zurück. Bei internen Funktionsaufrufen zählt er die 100 brav hoch.
    Ich will, daß er bei externen Zugriffen cnt auch hochzählt.
    Wie kriege ich das in den Griff?

    Danke,
    Echo



  • Wahrscheinlich wird der Server jedesmal neu geladen. ist das ein EXE- oder DLL-Server? Wie rufst du ihn auf?

    @rh, echelon: die variable wird üblicherweise global gespeichert und beim ersten Aufruf der Funktion initialisiert.


Anmelden zum Antworten