none
Warning při použití COM interface.

    Dotaz

  • Při kompilaci projektu obdržím varování
    Code Block

    Type library exporter warning processing 'HPTronic.Advertise.BannerCollection, AdvertiseManager'. Warning: Type library exporter encountered a type that derives from a generic class and is not marked as [ClassInterface(ClassInterfaceType.None)]. Class interfaces cannot be exposed for such types. Consider marking the type with [ClassInterface(ClassInterfaceType.None)] and exposing an explicit interface as the default interface to COM using the ComDefaultInterface attribute.


    , i když ve zdrojovém kódu mám použitý atribut ClassInterface:

    Code Block

    using System;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    using System.Text;

    namespace HPTronic.Advertise
    {
        [ClassInterface(ClassInterfaceType.None)]
        [ComVisible(true)]
        [ComDefaultInterface(typeof(IBannerCollectionInterface))]
        public class BannerCollection : List<BannerItem>, IBannerCollectionInterface
        {
            public BannerCollection()
            {}
        }

        public interface IBannerCollectionInterface
        {
            void Add(BannerItem item);
            void Clear();

        }  
    }


    Jedná se o projekt v VS 2005/.NET 2.0

    Můžete mi prosím někdo poradit, kde dělám chybu?
    27. listopadu 2007 12:06

Odpovědi

  • buď bych zkusil to, co radí... tedy [ClassInterface(ClassInterfaceType.None)]

    a nebo to udělal tak, jak rozum velí:

     

    Code Block

    using System;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    using System.Text;

    namespace HPTronic.Advertise
    {
        [ClassInterface(ClassInterfaceType.None)]
        [ComVisible(true)]
        [ComDefaultInterface(typeof(IBannerCollectionInterface))]
        public class BannerCollection : IBannerCollectionInterface
        {

            private /* protected, internal, protected internal */

            List<BannerItem> list = new List<BannerItem>()
            public BannerCollection()
            {}

            public void Add(BannerItem item) { list.Add(item); }
            public void Clear() { list.Clear(); }
        }

        public interface IBannerCollectionInterface
        {
            void Add(BannerItem item);
            void Clear();
        }  
    }

     

    8. ledna 2008 17:33