2011-11-29 4 views
0

누군가이 문제를 해결하고 싶다면 정말 고맙습니다. 상용 백업 제품을 제어 할 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이 둘 이상있는 경우 충돌

+0

For Each는 VBScript에서 작동하므로 형식이 일종의 컬렉션이라고 생각합니다. COM 라이브러리에 컬렉션 유형이 있습니까? – GTG

+1

무의미한 코드는 작동하지 않습니다. * 작동하지 않는 코드를 게시하십시오. –

+0

'VB에서 시도하지> NET 작동'이라고하면 무엇을 의미합니까? 오류가 있습니까? 컴파일 시간에? 런타임시에? –

답변

0

관심있는 사람은 루프 내에서 Dim volumes() As Object을 해결하고 volumes = Nothing을 루프 끝 부분에 설정하여 매번 다시 만들어야합니다. 왜 이런 사람인지 설명 할 수 있다면 이해할 수있을 것입니다.

1

레지스트리에서 HKCR로 ShadowStor.ShadowProtect을 찾습니다. CLSID는 GUID입니다. HKCR에서도 해당 GUID를 검색하십시오. CLSID 섹션에서 찾아야합니다. 이 키 아래에서 InprocServer32 아래에서 실제 dll 경로를 찾아야합니다.

이제 해당 구성 요소에 TypeLib가 포함되어 있으면 Visual Studio에서 해당 유형에 대한 참조를 추가 할 수 있습니다. (OLE View를 설치했다면 lib를 쉽게 검사 할 수 있습니다.)

dll에 대한 참조를 추가 할 수 없으면 별도의 .tlb 파일이있을 수 있으며 TypeLib 값에있는 GUID로 검색하여 찾을 수 있습니다.

+0

감사합니다. ShadowStor.ShadowProtect는 실제로 소프트웨어가 설치하는 Windows 서비스입니다. 내가 개체 브라우저에서 서비스 exe를 열고 모든 클래스와 회원을 볼 수 있지만 전혀 문서화되지 않습니다. –

+0

업데이트 된 질문보기 –

+0

ShadowStor.ShadowProtect를 참조하면 생성 한 개체에 Intellisense가 표시됩니까? VB.NET에서'CreateObject'를 사용할 필요가 없기를 바랍니다. – tcarvin

관련 문제