none
Visual Studio 2008 Visual C++ Wrapper-Klassen (Windows 7) RRS feed

  • Frage

  • Ich danke herzlich für die von mir gestern gestellte Frage zur Behandlung der Wrapper-Klassen von ActiveX-Steuerelementen.

    Ich beschreibe jetzt nochmals ausführlich meine Vorgehensweise:

            1.       Es wird ein ActiveX-Steuerelement erstellt.

           2.       Dies wird mit dem Testcontainer (TstCon.exe) getestet.

    3.       Das ActiveX-Steuerelement wird in einem Dialog der Resourcen-Datei einer Anwendung definiert. Anschließend wird für das Steuerelement ein Variablen-Element definiert. Dabei wird automatisch die zugehörige Wrapper-Klasse erzeugt.

    4.       Nun muss später für das Steuerelement z.B. eine neue Methode oder Eigenschaft definiert werden. Der Testcontainer ermöglicht problemlos die Änderung.

    5.       Nun muss in der Anwendung, in der das ActiveX-Steuerelement definiert ist , die Änderung durchgeführt werden. Dazu lösche ich das Steuerelement in der Resourcen-Datei und die Variable in der entsprechenden Header-Datei. Weiterhin lösche ich in der Quelldatei, die DDX_Control-Funktion der Resource, entferne (mit Löschung) die Wrapperdateien aus der Anwendung und lösche zuletzt die Steuerelement_ID in der Datei resource.h. Anschließend füge ich das Steuerelement erneut in die Resourcen-Datei ein. Wenn ich nun eine entsprechende Variable in die Anwendung einfügen will, erscheint in dem zugehörigen Dialog  das Feld mit dem Variablen-Typ  seltsamerweise schreibgeschützt, und es werden keine Dateinamen für die zughörige Wrapperklasse angezeigt. Das bedeutet, dass keine neue Wrapperklasse automatisch erzeugt wird. Das ist das Problem .  Die Generierung der Header-Datei einer Wrapper-Klasse habe ich mit der tlb-Datei des Steuerlements bewerkstelligt

    6.       Was muss in der Anwendung (die das ActiveX-Steuerelement enthält) geschehen (genaue Reihenfolge),  damit  das Steuerelement auf den neusten Stand gebracht  wird ?  Die Hilfe-Dateien liefern leider keine brauchbaren Hinweise.

     

    Für die weitere Hilfe herlichen Dank!

     

    Donnerstag, 31. März 2011 14:41

Antworten

  • Wenn sich das Interface geändert hat, musst Du die Wrapper Klassen neu aufbauen.

    Ich arbeite deshalb lieber mit #import!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 31. März 2011 17:17
    Moderator

Alle Antworten

  • 1.       Es wird ein ActiveX-Steuerelement erstellt.

    2.       Dies wird mit dem Testcontainer (TstCon.exe) getestet.

    3.       Das ActiveX-Steuerelement wird in einem Dialog der Resourcen-Datei einer Anwendung definiert. Anschließend wird für das Steuerelement ein Variablen-Element definiert. Dabei wird automatisch die zugehörige Wrapper-Klasse erzeugt.

    4.       Nun muss später für das Steuerelement z.B. eine neue Methode oder Eigenschaft definiert werden. Der Testcontainer ermöglicht problemlos die Änderung.

    5.       Nun muss in der Anwendung, in der das ActiveX-Steuerelement definiert ist , die Änderung durchgeführt werden.

    6.       Was muss in der Anwendung (die das ActiveX-Steuerelement enthält) geschehen, damit  die Wrapper-Klasse auf den geänderten Stand gebracht wird?

    Mittwoch, 30. März 2011 21:28
  • Dir Wrapprer Klasse muss neu erzeugt werden.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 31. März 2011 06:19
    Moderator
  • Reicht ein "Rebuild-All" nicht aus?


    Jochen Kalmbach (MVP VC++)
    Donnerstag, 31. März 2011 14:55
  • Wenn sich das Interface geändert hat, musst Du die Wrapper Klassen neu aufbauen.

    Ich arbeite deshalb lieber mit #import!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 31. März 2011 17:17
    Moderator