1
使用VS2012,我得到了這條線「CreateObject函數未聲明」錯誤:的CreateObject失敗,錯誤「CreateObject函數沒有被宣佈爲」
_cMouseIndicator = CreateObject("twsMouseIndicator.clsMouseIndicator")
有誰知道是怎麼回事錯在這裏? 我認爲CreateObject是標準庫之一的一部分。
謝謝你的幫助!
使用VS2012,我得到了這條線「CreateObject函數未聲明」錯誤:的CreateObject失敗,錯誤「CreateObject函數沒有被宣佈爲」
_cMouseIndicator = CreateObject("twsMouseIndicator.clsMouseIndicator")
有誰知道是怎麼回事錯在這裏? 我認爲CreateObject是標準庫之一的一部分。
謝謝你的幫助!
如果添加此導入:
Imports Microsoft.VisualBasic.Interaction
然後創建對象應該工作。
CreateObject是來自經典Visual Basic如VB6,ASP,VBA和VBScript的剩餘物。
您也可以達到同樣的後期綁定在這個片段:
Dim _cMouseIndicator As Object
Dim t As Type = Type.GetTypeFromProgID("twsMouseIndicator.clsMouseIndicator", True)
_cMouseIndicator = Activator.CreateInstance(t)
但它會很痛苦來調用這個對象與InvokeMember調用的方法。
我建議你添加你想要的庫作爲參考。 Visual Studio應該使用Interop處理ActiveX COM導入,您可以使用新的關鍵字。
在VB中,對於任一選項(CreateObject或Activator.CreateInstance),您需要具有Option Strict Off。在C#中,'dynamic'關鍵字可以讓你在相關對象上保持鬆弛,但不會在Option Strict Off編碼恐怖土地上丟掉其餘的代碼。 – 2014-10-07 23:13:32
@DaveDoknjas動態非常方便,但如果您使用InvokeMember,則即使使用Option Strict ** On **,CreateInstance也應該可以運行,儘管它會導致我的眼睛出現_bleed_。一個適用於「SAPI.SpVoice」類型的工作VB.NET示例應該是:SAPI.GetType()。InvokeMember(「Speak」,Reflection.BindingFlags.InvokeMethod,Nothing,SAPI,New Object(){「Hello world!」 ,0})' – 2014-10-07 23:27:12
對 - 我忽略了這一點。完全同意流血的眼睛。 – 2014-10-07 23:32:46