Was ist CComPtr?



  • Hallo, ich bin blutiger Anfänger in WinAPI

    kann mir jemand erklären was CComPtr ist?

    D.h. was es macht, wofür man es benutzt und wie man es anwendet?

    Aus der Hilfe bei MSDN werde ich nicht schlau.
    Kann es sein, dass man CComPtr zum erzeugen irgendwelcher Libaries benötigt?



  • gramboler schrieb:

    Hallo, ich bin blutiger Anfänger in WinAPI
    kann mir jemand erklären was CComPtr ist?

    CComPtr hat nix mit WinAPI zu tun, sondern gehört zur ATL
    Siehe: CComPtr Class
    http://msdn.microsoft.com/library/en-us/vclib/html/_atl_ccomptr.asp

    gramboler schrieb:

    D.h. was es macht, wofür man es benutzt und wie man es anwendet?

    Es "verwaltet" COM-Referenzen und gibt diese beim verlassen des Scopes automatisch frei, wenn nötig.

    gramboler schrieb:

    Kann es sein, dass man CComPtr zum erzeugen irgendwelcher Libaries benötigt?

    ATL.DLL



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum WinAPI in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ein CComPtr ist ein 'smart pointer', d.h. er sorg dafür, dass resourcen solange am leben bleiben er existiert und gibt sie frei sobald er stibt.
    In dem speziellen Fall ist dann ganze auf das COM IUnknow interface getrimmt. Das eine AddRef() und Release() methode, die einen internen refernz zähler im object hoch und runter zählen.
    Jeder der ein instanz vom dem object hält mach ein AddRef() ( refCount++ ) und Release() ( refCount-- ) solbad er nicht mehr braucht. Sobald der refCount 0 erreicht hat, bedeutet das, dass keine mehr das object bracht und es kann sich selbst löschen.
    CComPtr kümmert sich um genau das. Du brauchst nicht mehr selbst AddRef() aufrufen und dann später Release() (was man gern vergisst), sonder du stopfst das object in nen CComPtr und de regelt das für dich.



  • Danke für alles,......
    ich bin in einem tutorial darüber gestolperund habe gar nichts damit anfangen können.

    jetztwird mir einiges klarer


Log in to reply