2017-11-16 138 views
5

Visual Studio kullanılarak oluşturulan kodumu, geç bağlamaların izin verilmediği başka bir uygulama üzerinden çalıştırmaya çalışıyorum ve bu seçenek ne yazık ki değiştirilemez. Genelde programlamaya yeni başlıyorum ve başımı bu konuya sokmaya çalışıyorum.VB'de Son Bağlama ve Tür Sorunları

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 

kod URL'nin "google" ile Internet Explorer'ın tüm örneklerini kapatır: Burada çağırmak kod aşamasında kullanarak kod im olduğunu. İşte bu derlemeye çalışırken olsun hata iletisi:

ben 2. hatta ilk hata mesajı objIEShell ve Windows arasındaki tipi farkı ile ilgisi olduğunu fark şimdiye kadar yaptığım araştırmalara itibaren
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 

yöntem. Sanırım objIEShell kodlarını bunun gibi, CType(objIEShell,?) dönüştürmek zorundayım, ama .Windows yönteminin türünü nasıl bilmiyorum ya da bunu nasıl bulmalıyım. Ayrıca, ikinci hatayı nasıl düzelteceğine dair herhangi bir içgörü de, bununla nereden başlayacağından emin değilim.

+0

Modül başına Option Strict'i kapatabilirsiniz, sadece kod dosyasının üst kısmındaki 'Option Strict Off' yazın. – SSS

+1

Kullanmakta olduğum program buna izin vermiyor. Bu ayarı değiştirmeden sorunun nasıl giderileceğini bilmek istiyorum. Teşekkürler – unknownpresense

cevap

10

Microsoft, Explorer'ın bir web tarayıcısı gibi davrandığını hala planladığını belirsiz günlere geri döndü. Doğru koda ulaşmak oldukça zor hale gelir, birbiriyle çok fazla ilgisi olmayan iki ayrı COM bileşeninin birleşimidir.

Öncelikle bu bileşenlere iki başvuru eklemeniz gerekir, böylece derleyici adları anlar. Proje> Başvuru Ekle> COM sekmesini kullanın ve "Microsoft Internet Controls" ve "Microsoft Shell Controls and Automation" seçeneklerini işaretleyin. Bu Shell32 ve SHDocVw ad alanlarını ekler.

Şimdi böyle erken bağlanmış kodu yazabilirsiniz:

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() ifadesi muhtemelen en unintuitive biridir Shell.Windows özelliği olanlar arasındaki bağımlılığın kırmaya Object türünde olduğu iki bileşen. Oyuncular derleyiciyi mutlu tutmak için gerekli voodoo'dur.