【问题标题】:How to make properties visible to COM in a .NET DLL (Methods DO work)如何使 .NET DLL 中的属性对 COM 可见(方法有效)
【发布时间】:2020-06-08 13:16:15
【问题描述】:

已解决,见 cmets!

我有一个用 c# 编写的简单 .NET DLL。

在 asp-classic 或 VB.NET 中,我可以毫无问题地创建对象并调用 DLL 中的成员函数。 但是,这是我的绊脚石,我无法访问类属性。

示例代码如下:

[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
    ClassInterface(ClassInterfaceType.None),
    ComSourceInterfaces(typeof(IComEvents))]
public class Com : IComInterface
{
    public string MyProperty{ get; set; }   // <-- NOT ACCESSIBLE
    public void MyFunction()                // <-- ACCESSIBLE
    {
    }
}

这是服务器端脚本:

Set com = Server.CreateObject("ns.Com")    // WORKS
com.MyProperty = "abc"                    // GIVES ERROR
com.MyFunction                            // WORKS

我收到以下错误消息:

Microsoft VBScript 运行时错误“800a01b6”

对象不支持此属性或方法:MyProperty

谁能告诉我,为什么我可以调用函数'MyFunciton',但是如果我想设置属性值,我得到了上面的错误?

【问题讨论】:

  • 您知道字段和属性在 .NET 中是非常不同的东西吗?在 .NET 术语中,将属性称为字段实际上是不正确的。我编辑了您的标题以反映您问题的内容,但您已将其改回。您在谈论属性,而不是字段,所以您的问题标题不应该反映这一点吗? stackoverflow.com/questions/295104/…
  • 不,我没有,非常感谢!我还没有完全意识到,一个接口可以有属性,但不能有字段......!再次感谢 - 问题解决了:)
  • 正确的术语FTW!
  • 那么这个问题的答案是什么?我在 cmets 中没有看到任何实际回答问题的内容。

标签: c# asp.net vbscript com


【解决方案1】:

属性必须包含在接口定义中以使它们对 COM 可见。

例子:

[Guid("... some GUID ...")]
[ComVisible(true)]
public interface MyClassInterface
{
    string MyProperty { get; set; }
    bool MyMethod();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2011-05-10
    • 2018-03-08
    • 2011-08-31
    相关资源
    最近更新 更多