Interface inheritance in ComVisible classes in C#

前端 未结 2 1681
滥情空心
滥情空心 2020-12-11 18:50

Inherited property (P1) is not accessable from w/cscript.

Class structure looks something like this :

[ComVisible]
public interface IA 
{
     strin         


        
相关标签:
2条回答
  • 2020-12-11 19:35

    The code seems fine and it should work as intended except of course that you have omitted the return type of the two properties, they should be:

    [ComVisible]
    public abstract class Base : IA
    {
        public string P1{get{return "somestring";}}
    }   
    
    [ComVisible]
    public class Concrete : Base, IB
    {
       public string P2{get{return "P2somestring";}}
    }
    

    But I am assuming this is just an overlook in the code you wrote in your post.

    0 讨论(0)
  • 2020-12-11 19:36

    I'm stealing the answer to this from the COM Interop: Base class properties not exposed to COM link given in the very similar question "C# exposing to COM - interface inheritance"

    In particular the MVP on that site states:

    In COM interfaces can inherit from one another. However the .NET implementation that exposes the .NET interface to COM does not support inheritance. Therefore you must replicate any interface members in a base interface to the derived interface... The interop code does not look at base interface types when building the exposed COM interface.

    It does suggest some workarounds, such as inheriting from both interfaces, or implementing a 'native' TLB (write the inteface in IDL and compile it with MIDL - there should be projects for this in vis studio).

    0 讨论(0)
提交回复
热议问题