如果有人想對此採取措施,我會非常感激。我正在編寫一個VB.NET應用程序來控制商業備份產品。我需要做的一件事就是循環所有現有的工作並查看源驅動器。我能做到這一點在VBScript很乾脆這樣的:需要從VB.NET調用com函數
Dim SP, BackupJob, volumes
Set SP = CreateObject("ShadowStor.ShadowProtect")
For Each Job In SP.Jobs
Set BackupJob = SP.Jobs.GetBackupJob(Job.Description)
BackupJob.GetVolumes volumes
For Each Volume in volumes
WScript.Echo volume
Next
Next
Set SP = Nothing
但是什麼我嘗試在VB.NET工程。我很確定它與com函數返回變體數據類型和數組(特別是GetVolumes)有關。我嘗試過使用字符串數組,對象數組,甚至將返回值封裝在一個VariantWrapper中,我總是會遇到諸如「未實現」或「參數不正確」之類的錯誤。如果有人覺得無聊,想寫一些代碼,我會很樂意給它一個回報。
更新:
這很奇怪。看看這個代碼:
Dim SP As Object = CreateObject("ShadowStor.ShadowProtect")
Dim gotJob As Object
Dim volumes() As Object
Try
For Each Job As Object In SP.Jobs
gotJob = SP.Jobs.GetBackupJob(Job.Description.ToString())
gotJob.GetVolumes(volumes)
For Each volume As Object In volumes
MsgBox(volume.ToString())
Next
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
這從一個工作顯示音量,然後崩潰如果有一個以上的jobwith錯誤「無效被調用方」。
因爲For Each在VBScript中工作,我猜這個類型是某種類型的集合。你的COM庫是否包含任何集合類型? – GTG
有點沒有意義的發佈代碼的作品。發佈代碼*不起作用*。 –
當你說'沒有什麼我嘗試在VB> NET作品'你是什麼意思?你有錯誤嗎?在編譯時?在運行時? –