2017-11-16 24 views
5

런타임 바인딩이 허용되지 않는이 응용 프로그램을 통해 Visual Studio를 사용하여 원래 만든 코드를 실행하려고하는데이 옵션을 불행히도 변경할 수 없습니다. 나는 일반적으로 프로그래밍에 익숙하지 않고이 문제에 대해 머리를 맞이하기 위해 고심하고있다.VB에서 늦은 바인딩 및 형식 문제 VB에서

Dim objIEShell As Object = CreateObject("Shell.Application") 
Dim objIEShellWindows As Object = objIEShell.Windows 
Dim objIEWin As Object 
For Each objIEWin In objIEShellWindows 
    If InStr(objIEWin.LocationURL,"google")>0 Then 
     objIEWin.Quit 
     objIEWin = Nothing 
    End If 
Next 

코드는 단순히 URL에 'google'이 들어있는 모든 Internet Explorer 인스턴스를 닫습니다 다음은 호출 코드 단계에 사용하여 코드 메신저입니다. 이것은 컴파일 할 때 내가 오류 메시지입니다 :

내가 선 2의 첫 번째 오류 메시지가 objIEShell와 윈도우 사이의 유형의 차이와 함께 할 것입니다 실현 지금까지 수행 한 연구에서
Message: Error compiling code 
error BC30574: Option Strict On disallows late binding. At line 2 
error BC32023: Expression is of type 'Object', which is not a collection type. At line 4 

방법. 이 처럼 objIEShell을 변환해야한다고 생각합니다. 그러나 .Windows 메소드의 유형 또는이를 찾는 방법을 알지 못합니다. 또한 두 번째 오류를 해결하는 방법에 대한 모든 통찰력은 내가 어디서부터 시작해야할지 모르겠다.

+0

모듈 당 옵션 엄격을 해제 할 수 있습니다. 코드 파일 상단에 'Option Strict Off'를 입력하십시오. – SSS

+1

사용중인 프로그램에서 허용하지 않는 프로그램입니다. 이 설정을 변경하지 않고 문제를 해결하는 방법을 알고 싶습니다. 감사 – unknownpresense

답변

10

마이크로 소프트가 여전히 웹 브라우저처럼 동작하도록 계획을 세웠을 때까지 거슬러 올라간다. 올바른 코드에 도달하는 것을 꽤 어렵게 만듭니다. 이것은 서로별로 관련이없는 두 개의 개별 COM 구성 요소의 조합입니다.

컴파일러에서 이름을 이해할 수 있도록 해당 구성 요소에 두 개의 참조를 먼저 추가해야합니다. 프로젝트> 참조 추가> COM 탭을 사용하고 "Microsoft 인터넷 제어"및 "Microsoft 셸 제어 및 자동화"를 선택하십시오. 그러면 Shell32 및 SHDocVw 네임 스페이스가 추가됩니다.

지금 당신은이 같은 초기 바인딩 코드를 작성할 수 있습니다

Dim objIEShell = New Shell32.Shell 
    Dim objIEShellWindows = CType(objIEShell.Windows, SHDocVw.IShellWindows) 
    Dim objIEWin As SHDocVw.WebBrowser 
    For Each objIEWin In objIEShellWindows 
     If InStr(objIEWin.LocationURL, "google") > 0 Then 
      objIEWin.Quit() 
     End If 
    Next 

에서는 CType() 표현이 아마도 가장 직관적 하나의 Shell.Windows 속성들 사이의 의존성을 깰 Object 형식을 두 가지 구성 요소. 캐스트는 컴파일러를 행복하게 유지하는 데 필요한 부두입니다.