2013-10-07 47 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()永遠