【问题标题】:Widening operator CType for COM Interop扩展 COM 互操作的运算符 CType
【发布时间】:2015-05-22 12:18:35
【问题描述】:

我的代码有一个奇怪的问题。我有一个 .NET 代码,我需要将其用于 COM 互操作性。我已经完成了必要的工作,因此我的所有属性和方法都在 VB 脚本中作为 COM 对象公开。

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

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 以确保隐式转换有效。

这个Display需要使用如下方法。

显示 X(这应该默认为 X.Text 并显示在屏幕上)

如果我在另一个 .NET 项目中使用 dll 但会抛出错误“没有这样的属性或方法”,那么所有这些都可以正常工作

任何帮助将不胜感激。如果您还需要任何其他信息,请随时询问。这对我们来说是一件大事。

【问题讨论】:

  • 转换运算符是VB.NET语言的一个特性,只有编译器知道,也只有编译器知道什么时候需要调用。它不能在除此之外的任何运行时环境中工作,当然不能在脚本语言中工作。预期的用途对我来说非常不清楚,但听起来你需要添加一个显式的 Display() 方法或属性。

标签: vb.net vbscript com vb6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2010-12-24
    • 2010-12-14
    • 1970-01-01
    • 2011-04-13
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多