常规编程
现在阅读
ATL Collection Wizard
0

ATL Collection Wizard

由 ultracpy2018年1月26日

<!– Download Links –>

  • Download source files – 18 Kb
  • Download wizard files – 18 Kb
  • Sample Image

    Introduction

    One evening, tired of creating COM collections by hand, I created an object wizard
    to handle the grunt work for me. This wizard will implement the popular ICollectionOnSTLImpl
    interface, providing a few enhancements for a collection. The code this wizard writes was inspired
    by the book “ATL Internals” (Addison-Wesley Pub Co; ISBN: 0201695898). I trust what the authors in that book
    wrote and haven’t stopped to try to understand it all. But nonetheless…on with the wizard.

    Comments

    Sample Image

    You can choose which STL container your collection is based on, as well as the methods your collection
    will expose beyond the standard-issue methods provided by ICollectionOnSTLImpl. Typically, when I
    design collections I don’t want the user to be able to create the collection themselves. Hence, the “non-creatable”
    and “unregistered” options. “Unregistered” will simply add the DECLARE_NO_REGISTRY to your collection’s
    CoClass, but the “Non-creatable” option presented a real problem for me while writing this wizard. There is
    no method exposed by the ATL Object Wizard that allows me to add the proper OBJECT_ENTRY_NON_CREATEABLE macro
    to the object map. So, when this option is chosen, I throw a bogus value into the OBJECT_ENTRY macro to force
    a compile error. It is up to the developer to rectify the problem by inserting the proper macro. A cute message box will remind you
    of this when choosing this option.

    Deficiencies

    • I didn’t have time to create an install package for everyone to use, so the installation is manual but straight-forward.
      Simply copy everything but the *.dll into your “<DevStudioDirectory>\Common\MSDev98\Template\ATL” directory, and then copy and register the *.dll
      anywhere you’d like. Next time you run the ATL Object Wizard, you’ll be able to create a collection based on what I’ve written.
    • Beneath all of the typedefs and Impls is the collection’s workhorse, IEnumVARIANT. Some developers might wish to use
      a different IEnumXXX, so they’ll have to alter the code manually.
    • This wizard doesn’t support the stl::map container. It will in the future.
    • You MUST compile the IDL file at least once before using this wizard. This is because the wizard uses the project’s typelib to discover
      the COM objects that the collection can contain.

    出处:https://www.codeproject.com/Articles/660/ATL-Collection-Wizard

    关于作者
    ultracpy
    评论

    你必须 登录 提交评论