2015-03-19 82 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的單獨方法或屬性,該屬性不屬於您正在實施的任何接口的一部分。