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