【问题标题】:.NET Properties in COM Interop?COM 互操作中的 .NET 属性?
【发布时间】:2014-09-27 23:21:03
【问题描述】:

您是否不能使用 COM 互操作来公开 COM 属性?一切都必须是一种方法?

如果不是这样,你是怎么做到的?

【问题讨论】:

    标签: .net com interop


    【解决方案1】:

    不正确。

    我理解您的问题是在询问COM calling or using a .NET class

    根据this page,您可以将托管类的方法、属性和字段公开给 COM 使用者。

    您要向 COM 公开的所有托管类型、方法、属性、字段和事件都必须是公共的。类型必须有一个公共的默认构造函数,这是唯一可以通过 COM 调用的构造函数。

    这对你有用吗?:

    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [Guid("A1209192-723B-4325-8599-FB39D9F202D9")]
    public interface ITicklee
    {
        [DispId(1)]
        void TickleMe();
    
        [DispId(2)]
        int Count{get;}
    }
    
    
    [Guid("45715A3B-CA95-49f7-9889-A0022B31EF8A")]
    public class Elmo : ITicklee
    {
        // default ctor
        public Elmo () {}
    
        private int _tickleCount;
    
        public int Count
        {
            get
            {
                return _tickleCount;
            }
        }
    
        public void TickleMe()
        {
            _tickleCount++;
        }
    }
    

    VBScript 测试客户端可能如下所示:

    Sub TestTickle()  
    
        WScript.echo("")
    
        WScript.echo("Instantiating an Elmo ...")
        dim elmo
        set elmo = WScript.CreateObject("Ionic.Tests.Com.Elmo")
    
        WScript.echo("Tickling...")
    
        For i = 1 to 5
          elmo.TickleMe()
        Next  
    
        WScript.echo("")
        c = elmo.Count
    
        WScript.echo("Tickle Count = " & c)
    
        ' one for the road'
        elmo.TickleMe()
    
    End Sub
    
    call TestTickle()     ' ahem '
    

    【讨论】:

      【解决方案2】:

      如果您的意思是不能使用互操作将 com 对象属性公开给 .NET 应用程序,并且 COM 对象是在 VB 中创建的,那么您是正确的。 VB 对本地类型使用属性 LET,对对象类型使用属性 SET。如果您尝试从 .NET 应用程序设置 COM 对象的属性,它会尝试使用 SET。如果基础属性是原生 VB 类型,则失败。

      据我所知,除了使用方法而不是属性之外,唯一的解决方案是手动操作 IDL。

      【讨论】:

        【解决方案3】:

        评论:afaik 你可以只使用只读属性

        【讨论】:

        • 虽然由于声誉低而无法发表评论很烦人,但请避免使用 cmets 回答问题。 stackoverflow.com/help/whats-reputation 可以提供一些关于声誉获得(和损失)的信息
        • 语法被否决。这是一个问题吗?一份声明?您是在问是否只能在 COM 对象中使用只读属性,还是说确实只能在 COM 对象中使用只读属性?
        猜你喜欢
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多