2017-11-16 33 views
5

Tôi đang cố gắng chạy mã của mình ban đầu được tạo bằng cách sử dụng Visual Studio thông qua một ứng dụng khác mà các ràng buộc trễ không được phép và tùy chọn này không thể thay đổi. Tôi rất mới để lập trình nói chung và đấu tranh để có được đầu của tôi xung quanh vấn đề. Đây là mã im sử dụng trong giai đoạn mã gọi:Các vấn đề ràng buộc và loại kết thúc Trong 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 

Mã này chỉ đóng tất cả các phiên bản của Internet Explorer bằng "google" trong URL. Đây là thông báo lỗi tôi nhận được khi cố gắng để biên dịch nó:

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 

Từ nghiên cứu tôi đã thực hiện cho đến nay tôi nhận được thông báo lỗi đầu tiên trên dòng 2 là để làm với sự khác biệt giữa loại objIEShell và Windows phương pháp. Tôi nghĩ rằng tôi phải chuyển đổi objIEShell như thế này, CType(objIEShell,?), nhưng tôi không biết loại phương thức .Windows hoặc cách tìm ra điều này. Ngoài ra bất kỳ cái nhìn sâu sắc về cách sửa lỗi thứ hai sẽ được đánh giá rất nhiều như tôi không chắc chắn nơi để bắt đầu với một trong hai.

+0

Bạn có thể tắt Tùy chọn nghiêm ngặt trên mỗi mô-đun, chỉ cần nhập 'Tùy chọn tắt nghiêm ngặt' ở đầu tệp mã – SSS

+1

Chương trình tôi đang sử dụng không cho phép điều này. Tôi muốn biết cách khắc phục sự cố mà không thay đổi cài đặt này. Cảm ơn – unknownpresense

Trả lời

10

Ngày này quay trở lại những ngày tuyệt vời khi Microsoft vẫn có kế hoạch làm cho Explorer hoạt động giống như một trình duyệt web. Làm cho nó khá khó khăn để đến đúng mã, nó là một sự kết hợp của hai thành phần COM riêng biệt mà không có nhiều để làm với nhau.

Trước tiên, bạn cần thêm hai tham chiếu vào các thành phần đó để trình biên dịch hiểu được tên. Sử dụng Project> Add Reference> COM tab và đánh dấu vào "Microsoft Internet Controls" và "Microsoft Shell Controls and Automation". Điều đó bổ sung thêm các không gian tên Shell32 và SHDocVw.

Bây giờ bạn có thể viết mã sớm bị ràng buộc như thế này:

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 

Các CType() biểu hiện có lẽ là một trong unintuitive nhất, tài sản Shell.Windows là kiểu Object để phá vỡ sự phụ thuộc giữa những hai thành phần. Các diễn viên là voodoo cần thiết để giữ cho trình biên dịch hạnh phúc.

Các vấn đề liên quan