COM Interop中的.NET属性?
答
不正确。
我理解你的问题是询问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应用程序使用interop,并且COM对象是在VB中创建的,那么你是正确的。 VB使用属性LET作为本机类型,使用属性SET作为对象类型。如果您尝试从.NET应用程序设置COM对象的属性,它会尝试使用SET。如果底层属性是本机VB类型,则失败。
据我所知,除了使用方法而不是属性之外,唯一的解决方案是手动操作IDL。
答
点评:据我所知,你可以使用只读属性只有
虽然这很烦人,当你不能因低信誉发表评论,请避免回答的问题与意见。 http://*.com/help/whats-reputation可以提供一些关于声誉获得(和损失)的信息 – chrisb2244 2014-09-27 15:24:49