如果有人想对此采取措施,我会非常感激。我正在编写一个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作品'你是什么意思?你有错误吗?在编译时?在运行时? –