2013-10-07 45 views
0

我遇到了CreateObject的问题。它一直告诉我这是一个未声明的元素。我需要添加一些具体的参考吗?VisualBasic CreateObject()

对于excel等的引用已经在其中,并且不会从MSDN获得更多信息。

Public Function BBANtoBIC(ByVal BBAN As String) As String 
     Dim xd As Object 
     xd = CreateObject("msxml2.domdocument.4.0") 
     xd.Load("http://www.ibanbic.be/IBANBIC.asmx/BBANtoBIC?value=" & BBAN) 
     Do While xd.readyState <> 4 
      DoEvents() 
     Loop 
     BBANtoBIC = xd.Text 
    End Function 
+4

有很多自然的方式来从.NET与XML交互比使用旧的COM组件。有多个[名称空间](http://msdn.microsoft.com/en-us/library/gg145036.aspx)专用于它。我敢肯定,如果你搜索'.NET XML ',你会发现一些更具代表性的代码。 –

+0

这件作品是我老板需要使用的一部分,因为它是我们应用程序的一部分,所以我不能像这样改变它。 – Matheno

+0

否则我想要一些建议,我是VB新手。 – Matheno

回答

2

“msxml2.domdocument.4.0”可能未安装在您的系统中。它从2001年开始。你应该使用“Msxml2.DOMDocument.6.0”。请参阅Using the right version of MSXML in Internet Explorer

+0

这是我猜想的问题,也许你可以帮我解决以下错误,我得到了CreateObject:“CreateObject不能用于在Visual Basic中创建类的实例,除非这些类显式公开为COM组件。” – Matheno

+0

@Marijke我无法重现异常。但是,似乎你真的试图创建没有明确暴露的类,或者该类的注册表信息已损坏。您应该能够在注册表中看到记录,例如Msxml2.DOMDocument.6.0位于HKCR \ CLSID \ {88d96a05-f192-11d4-a65f-0040963251e5}。我会将记录与其他计算机中的记录进行比较,或尝试重新注册.dll(%SystemRoot%\ System32 \ msxml6.dll)。我也可以是x86和x64体系结构的组合。找到更详细的信息是必要的。 – IvanH

1

通读该功能后,所做的只是返回文档的文本。它并没有对xml做任何事情。因此,你可以用这个替换它:

Public Function BBANtoBIC(ByVal BBAN As String) As String 
    Using wc As New System.Net.WebClient() 
     Return wc.DownloadString("http://www.ibanbic.be/IBANBIC.asmx/BBANtoBIC?value=" & BBAN) 
    End Using 
End Function 

我看到只有两个原因,为什么这可能不是真实的。首先,如果您要计算xml文档对象以确保您下载的内容确实是有效的,那么格式良好的xml,在这种情况下,应该在调用函数的位置附近提供错误处理代码。第二个是如果DoEvents等待循环有用于程序响应,而不是等待xml解析器......这也是非常糟糕的设计。以这种方式使用DoEvents()会产生副作用。如果它是只有关于等待XML解析器,新的代码应该完全避免这种延迟。

如果您确实需要解析/验证xml,那么至少有三种不同的方式内置于.Net框架中,无需依赖CreateObject()即可完成此操作。在.Net中不应该使用CreateObject()永远