Umstieg BCB6 auf XE - Konvertierungsproblem ATL nach DAX Automatisierungsserver



  • Hallo,
    ich erforsche gerade die Umstellungshürden von BCB6 auf den neuen XE. Hierbei bin ich auf folgendes Problem gestossen:

    Wir haben in unserer Softwaren einen COM Automatisierungsserver (basierend auf ATL). Dies lässt sich unter dem XE nicht mehr compilieren, da ATL nicht mehr untersützt wird. Laut der Embarcadero Hilfe muss ich das Projekt nur compilieren und es wird automatisch nach DAX konvertiert. Geht nur nicht. Bin schon soweit, das ich Defines in den Projektoptionen gefunden habe, die auf ATL deuten. Diese habe ich getaucht gegen "USING_DAX", aber trotzdem geht es nciht. Im Typbibliothekseditor kann ich auf aktualisieren drücken, es wird aber nicht die neue DAX Technik verwendet. Mache ich ein Testprojekt und baue einen Automatisierungsserver neu ein, scheint alles zu funktionieren.

    Also wie konvertiere ich ein ATL basierendes Projekt in ein DAX basierendes? KAnn mir da jemand weiterhelfen?

    Gruss

    Jörn



  • California schrieb:

    Wir haben in unserer Softwaren einen COM Automatisierungsserver (basierend auf ATL). Dies lässt sich unter dem XE nicht mehr compilieren, da ATL nicht mehr untersützt wird.

    Doch, die ATL wird unterstützt; sie ist nur nicht mehr mitgeliefert, wohl aus lizenzrechtlichen Gründen. Du kannst aber (das ist auch irgendwo dokumentiert) einfach das include\atl-Verzeichnis von einem älteren C++Builder-Release in das XE-Includeverzeichnis herüberkopieren.

    California schrieb:

    Laut der Embarcadero Hilfe muss ich das Projekt nur compilieren und es wird automatisch nach DAX konvertiert.

    Das ist mir neu. Wo steht das?

    Ach, du meinst sicher das hier. Da steht aber, du müßtest dein Projekt neu erstellen und dann die Quelldateien des alten Projektes zum neuen Projekt hinzufügen.

    Ich weiß nicht, wie komplex eure ATL-Projekte sind, aber wenn ich richtig informiert bin, deckt der ATL-DAX-Wrapper, der eine relativ einfache Umstellung in XE ermöglicht, bei weitem nicht alle Möglichkeiten der ATL ab. Es kann also gut sein, daß du von Hand nachhelfen mußt; das hängt dann jeweils vom Einzelfall ab.



  • wir haben jetzt einen Großteil umgestellt auf DAX, nur bekommen wir die Events nicht zum laufen....

    Alter Code:

    ...
    TMyCOMImpl * pCOMInterface;
    pCOMInterface->Fire_MyEvent();
    ...
    

    Ich habe das Projekt neu aufgesetzt, ein Automatisierungsserver mit Ereignisunterstützung hinzugefügt, meinen Event definiert. Der Code ist auch zu sehen, aber ich kann nicht mehr auf die "Fire" Funktion zugreifen über den Pointer 'pCOMInterface' 😞 Wie binde ich die Funktionalität des Events ein?

    Die Impl Klasse sah unter ATL noch so aus:

    ...
    class ATL_NO_VTABLE TMyCOMImpl : 
      public CComObjectRootEx<CComSingleThreadModel>,
      public CComCoClass<TMyCOMImpl, &CLSID_MyCOM>,
      public IConnectionPointContainerImpl<TMyCOMImpl>,
      public TEvents_MyCOM<TMyCOMImpl>,  
      public IDispatchImpl<IWCOM_MyCOM, &IID_IMyCOM, &LIBID_MYLIB>
    {......
    

    in TEvents war der Event definiert...

    jetzt so:

    class DAX_COM_CLASS TMyComImpl : public TCppAutoObjectEvent<IMyCom>
    {
       typedef _COM_CLASS inherited;
       IMyComEventsDisp FEvents;
    ....
    

    Die TEvents gibt es irgendwie nicht mehr....

    Jörn



  • Ich kann es dir ohne weitere Recherche nicht sagen, aber mit Delphi und damit DAX ist das Auslösen von Events sicherlich auch möglich. Suche mal in der Dokumentation und im Netz nach "delphi activex events" oder etwas ähnlichem.



  • Hallo California,

    Wenn Sie dieses Problem gelöst haben, könnten Sie evtl. einen Ausschnitt Ihres Codes, der das Versenden von Ereignissen vom Server zum Client (in DAX) behandelt?

    Vielen Dank.

    Victor



  • Andernfalls kann ich empfehlen, die Frage in den Embarcadero-Newsgroups zu stellen:
    https://forums.embarcadero.com/forum.jspa?forumID=28



  • Hallo,
    ich habe die Forschung diesbezüglich eingestellt und weiterhin die 'alte' Version mit ATL benutzt

    Gruss


Anmelden zum Antworten