2015-03-19 79 views
0

我的代码有一个奇怪的问题。我有一个.NET代码,我需要提供COM互操作性。我已经完成了必要的工作,所以我的所有属性和方法都作为VB脚本中的COM对象公开。COM Interop的扩展操作符CType

但是我需要做一件小事。让我通过发布一段代码来解释

Option Strict Off 
Option Explicit On 
Class X 

Public text as string 
Public index as integer 

Public Shared Widening Operator CType(ByVal i As X) As String 
     Return i.Text 
End Operator 

End Class 

在这段代码中,我有属性来设置/获取类的Text和Index成员。但是在我的脚本中(当.NET不在图片中时写得很久),有一个名为“Display”的函数,它接收一个字符串并将其显示在文本框中。 我甚至试过Option Explicit Off来确保隐式转换工作。

此显示需要使用下面的方法。

显示X(这应该是默认到X.Text并将其显示在屏幕上)

这一切都工作得很好,如果我使用其他.NET项目的dll但抛出一个错误“没有这样的财产或方法“

任何帮助将不胜感激。如果您还需要其他信息,请随时询问。这对我们来说正变得越来越好。

+0

转换运算符是VB.NET语言的一个特性,只有编译器知道它,只有编译器知道何时需要调用它。除此之外,它不能在任何运行时环境中工作,当然不是在脚本语言中。预期的用法对我来说很不明显,但听起来你需要添加一个显式的Display()方法或属性。 – 2015-03-19 12:11:05

回答

0

对于COM,您应该使用<DispId(0)>属性声明您的默认属性。 DISPID 0 is the default or value member。或者,如果.Text必须具有非零的DISPID,则可能有DISPID为0的单独方法或属性,该属性不属于您正在实施的任何接口的一部分。