如何使 .NET DLL 中的属性对 COM 可见(方法有效)
Posted
技术标签:
【中文标题】如何使 .NET DLL 中的属性对 COM 可见(方法有效)【英文标题】:How to make properties visible to COM in a .NET DLL (Methods DO work) 【发布时间】: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 术语中,将属性称为字段实际上是不正确的。我编辑了您的标题以反映您问题的内容,但您已将其改回。您在谈论属性,而不是字段,所以您的问题标题不应该反映这一点吗? ***.com/questions/295104/… 不,我没有,非常感谢!我还没有完全意识到,一个接口可以有属性,但不能有字段......!再次感谢 - 问题解决了:) 正确的术语FTW! 那么这个问题的答案是什么?我在 cmets 中没有看到任何实际回答问题的内容。 【参考方案1】:属性必须包含在接口定义中以使它们对 COM 可见。
例子:
[Guid("... some GUID ...")]
[ComVisible(true)]
public interface MyClassInterface
string MyProperty get; set;
bool MyMethod();
【讨论】:
以上是关于如何使 .NET DLL 中的属性对 COM 可见(方法有效)的主要内容,如果未能解决你的问题,请参考以下文章
为 ASP Classic 中的 COM 可见性注册 .NET DLL