none
Verweis auf MSHTML.TLB bezw. MSHTML.DLL funktioniert nicht RRS feed

  • Frage

  • Ich habe MS VB 2008 Express in Betrieb. Dies mit XP Service Pack 3

    Ich arbeite an Browsersteuerungen (Internet-Explorer 8)

    Das Öffnen, Navigieren, usw. des Browsers IE läuft einwandfrei
    Der Zugriff auf die Elemente des Browser-Dokuments funktioniert unter VB8 nicht
    (Bei VBA mit Excel ist alles i. O.)

    Die MSHTML.DLL hat Version 8.0.6001.19190
    Die MSHTML.TLB hat Version 8.0.18702

    Das Problem liegt in der Unmöglichkeit einen Verweis auf die MSHTML-Bibliotheken zu erstellen.
    Versuche ich es mit MSHTML.DLL kommt eine Meldung "Es konnte kein Verweis hunzugefügt werden"
    Versuche ich es mit MSHTML.TLB hängt das Programm auf.

    Ich komme nicht mehr weiter, habe auch nichts in den Foren gefunden, das ich interpretieren kann.

    Danke für Hinweise

    Roland Burkhard

    Sonntag, 18. März 2012 09:36

Antworten

  • Hallo Roland,

    vorausgesetzt Dein System ist fehlerfrei aufgesetzt, sollten Dir zwei Möglichkeiten zur Verfügung stehen auf die HTML Objektbibliothek zu verweisen:

    1.) Unter Projekt => Verweis hinzufügen > .NET
         Hier sollte mind. ein Assembly "Microsoft.Mshtml" vorhanden sein. (Ansonsten wird dies über die Office PIA installiert)

    2.) Unter Projekt => Verweis hinzufügen > COM
         Hier findet man einen Verweis "Microsoft HTML Object Library" (entspricht der MSHTML.TLB)

    Auf die MSHTML.DLL kann nicht verwiesen werden, da diese keine Typinformationen beinhaltet.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de

    Montag, 19. März 2012 09:06
  • Hallo Roland,

    keine Frage, dass eine Lösung auch anderen Personen helfen würde. Aber offensichtlich ist es so, dass von diesem Problem nicht viele betroffen sind. So kann ich bspw. auf zwei unterschiedlichen Systemen den Verweis auf MSHTML.TLB ohne weiteres hinzufügen. Mir scheint hier ein Problem vorzuliegen, das mehr oder weniger spezifisch für Dein System ist.

    Als Workaround kannst Du versuchen das notwendige Interop-Assembly für MSHTML.TLB selber über das SDK Tool "tlbimp" zu erstellen. Basierend auf diesem Forenbeitrag, der ein ähnliches Problem mit VS2010 beschreibt ein Batch File, das diesen Vorgang unterstützt:

    SET PATH=%PATH%;%PROGRAMFILES%\Microsoft SDKs\Windows\v6.0A\bin
    set SRCTLB=mshtml.tlb
    set NAMESPACE=mshtml8
    set VERSION=8.0.6000.18865
    set PREFIX=Interop
    
    sn -k %TEMP%\%NAMESPACE%.snk
    
    TlbImp.exe /verbose /out:%TEMP%\%PREFIX%.%NAMESPACE%.dll /keyfile:%TEMP%\%NAMESPACE%.snk /namespace:%NAMESPACE% /transform:dispret /asmversion:%VERSION% /tlbreference:%SYSTEMROOT%\System32\stdole2.tlb %SYSTEMROOT%\System32\%SRCTLB%
    Das generierte Interop-Assembly findest Du dann im lokalen %TEMP% Verzeichnis.

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de

    Dienstag, 20. März 2012 07:27
  • Das Problem ist gelöst

    Ich habe die Variante 2 von Thorsten (19. 3) probiert. Dabei ist nicht das Programm abgestürzt, sondern es ist ca. 1 Minute nichts passiert. Dann war der Verweis da (Ich war in der Zwischenzeit Zähneputzen). In der Folge war die weitere Programmierung (Zugriff auf Webbrowser.Document....) möglich.

    Vielen Dank für die Geduld und die Hinweise Thorsten.

    Roland Burkhard

    Dienstag, 27. März 2012 13:51

Alle Antworten

  •  Hallo Burkhard,

    habe selber versucht die Registierung dieser DLL auf XP  mit Visual Studio 2008 zu erreichen. Gleicher Fehler.

    Hier eine Antwort auf Deine Frage :  http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/169eba36-0360-49e4-8491-5aeb60a06bb7/

    Vielleicht hilft Dir das? Wofür ist diese DLL?

    schöne Grüsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Sonntag, 18. März 2012 20:18
  • Guten Tag und vielen Dank für den Hinweis Ellen
    Ich habe das Zitat kurz gesichtet, mehr Fragen als gute Antworten.

    Ich werde nun folgendes tun, in dieser Reihenfolge
    1. Die DLL und TLB-Dateien durch neuere Versionen ersetzen (bringt vermutlich nichts)
    2. Den Internet-Explorer neu installieren (da erwarte ich eher eine Lösung)

    Im übrigen haben wir hier an meinem Arbeitsplatz (die Schweizerische Post) einen Explorer-Guru, den werde ich auch noch ansprechen.

    Was mich interessiert: Konntest Du das Problem bei Dir lösen?

    Funktion der MSHTML.DLL: Lesen und anzeigen der HTML-Seiten. Ich muss sie ansprechen um Textboxen zu befüllen und Buttons zu betätigen. Das geht normalerweise zuverlässig, auch bei mir im Geschäft, allerdings mache ich es hier mittels VBA/Excel. Nur bei VBA scheint es Probleme zu geben. Microsoft scheint auch nicht zu helfen.

    Bitte halte mich/uns auf dem Laufenden, wenn sich bei Dir Erfolge einstellen.

    Danke und freundliche Grüsse

    Roland (das ist der Vorname) ro.burkhard@bluewin.ch

    Montag, 19. März 2012 08:15
  • Was mich interessiert: Konntest Du das Problem bei Dir lösen?

    Hallo Roland,

    nein nicht. Die Frage wäre zu klären, ob es für diese MSHTML.DLL nicht schon eine NET Klasse gibt.

    Ich habe unter diesem Suchbegriff im US Forum mehrere dazu Beiträge gefunden. Da kommst Du hin, indem Du oben rechts von Deutschland auf United States wechselst.

    schöne Grüsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Montag, 19. März 2012 08:40
  • Hallo Roland,

    vorausgesetzt Dein System ist fehlerfrei aufgesetzt, sollten Dir zwei Möglichkeiten zur Verfügung stehen auf die HTML Objektbibliothek zu verweisen:

    1.) Unter Projekt => Verweis hinzufügen > .NET
         Hier sollte mind. ein Assembly "Microsoft.Mshtml" vorhanden sein. (Ansonsten wird dies über die Office PIA installiert)

    2.) Unter Projekt => Verweis hinzufügen > COM
         Hier findet man einen Verweis "Microsoft HTML Object Library" (entspricht der MSHTML.TLB)

    Auf die MSHTML.DLL kann nicht verwiesen werden, da diese keine Typinformationen beinhaltet.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de

    Montag, 19. März 2012 09:06
  • Guten Tag und vielen Dank für die präzisen Angaben Thorsten
    Ich habe beides ausprobiert und folgendes festgestellt
    1) Via Projekt - Verweis  - .NET erscheint Microsoft.Mshtml gar nicht
    2) Via Projekt - Verweis  - COM erscheint Microsoft HTML Library, die TLB-Datei (Version 4)
        Nach Click stürzt das Programm ab. Notorisch.

    Ich wäre sehr dankbar für weitere Hinweise; speziell wie ich mit dem PIA umgehen muss.
    Ich bin überzeugt, eine Lösung würde ausser mir auch weiteren Personen helfen.

    Vielen Dank zum voraus

    Roland Burkhard

    Montag, 19. März 2012 17:16
  • Hallo Roland,

    keine Frage, dass eine Lösung auch anderen Personen helfen würde. Aber offensichtlich ist es so, dass von diesem Problem nicht viele betroffen sind. So kann ich bspw. auf zwei unterschiedlichen Systemen den Verweis auf MSHTML.TLB ohne weiteres hinzufügen. Mir scheint hier ein Problem vorzuliegen, das mehr oder weniger spezifisch für Dein System ist.

    Als Workaround kannst Du versuchen das notwendige Interop-Assembly für MSHTML.TLB selber über das SDK Tool "tlbimp" zu erstellen. Basierend auf diesem Forenbeitrag, der ein ähnliches Problem mit VS2010 beschreibt ein Batch File, das diesen Vorgang unterstützt:

    SET PATH=%PATH%;%PROGRAMFILES%\Microsoft SDKs\Windows\v6.0A\bin
    set SRCTLB=mshtml.tlb
    set NAMESPACE=mshtml8
    set VERSION=8.0.6000.18865
    set PREFIX=Interop
    
    sn -k %TEMP%\%NAMESPACE%.snk
    
    TlbImp.exe /verbose /out:%TEMP%\%PREFIX%.%NAMESPACE%.dll /keyfile:%TEMP%\%NAMESPACE%.snk /namespace:%NAMESPACE% /transform:dispret /asmversion:%VERSION% /tlbreference:%SYSTEMROOT%\System32\stdole2.tlb %SYSTEMROOT%\System32\%SRCTLB%
    Das generierte Interop-Assembly findest Du dann im lokalen %TEMP% Verzeichnis.

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de

    Dienstag, 20. März 2012 07:27
  • Das Problem ist gelöst

    Ich habe die Variante 2 von Thorsten (19. 3) probiert. Dabei ist nicht das Programm abgestürzt, sondern es ist ca. 1 Minute nichts passiert. Dann war der Verweis da (Ich war in der Zwischenzeit Zähneputzen). In der Folge war die weitere Programmierung (Zugriff auf Webbrowser.Document....) möglich.

    Vielen Dank für die Geduld und die Hinweise Thorsten.

    Roland Burkhard

    Dienstag, 27. März 2012 13:51