【发布时间】:2014-09-27 23:21:03
【问题描述】:
您是否不能使用 COM 互操作来公开 COM 属性?一切都必须是一种方法?
如果不是这样,你是怎么做到的?
【问题讨论】:
您是否不能使用 COM 互操作来公开 COM 属性?一切都必须是一种方法?
如果不是这样,你是怎么做到的?
【问题讨论】:
不正确。
我理解您的问题是在询问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 '
【讨论】:
如果您的意思是不能使用互操作将 com 对象属性公开给 .NET 应用程序,并且 COM 对象是在 VB 中创建的,那么您是正确的。 VB 对本地类型使用属性 LET,对对象类型使用属性 SET。如果您尝试从 .NET 应用程序设置 COM 对象的属性,它会尝试使用 SET。如果基础属性是原生 VB 类型,则失败。
据我所知,除了使用方法而不是属性之外,唯一的解决方案是手动操作 IDL。
【讨论】:
评论:afaik 你可以只使用只读属性
【讨论】: