2012-03-02 14 views
7

Chcę użyć niektórych nowych funkcji mshtml.dll w wersji 9.0, takich jak IHTMLCSSRule.Jak dodać odniesienie do mshtml wersji 9 w .NET

Wersja współdziałanie w następującym folderze jest wersja 7.0.3300.1:

C: Program Files \ \ Microsoft.NET \ Primary Interop zgromadzeń \ Microsoft.mshtml.dll

COM wersja w następującym folderze jest wersja 9.0.8112.16441:

C: \ Windows \ System32 \ mshtml.dll

Z tego co mogę ustalić z sieci, należy to zrobić, aby stworzyć wersję .NET współdziałania 9:

d: \ ZTEMP> tlbimp Mshtml.tlb /out:Microsoft.mshtml.dll/namespace : MSHTML /asmversi na: 9,0

wydaje się, że pracował ale generowane następujące ostrzeżenia:

tlbimp: TI3001 ostrzeżenie: Podstawowy montaż współdziałanie „Microsoft.mshtml, Wersja = 7. 0.3300.0, Kultura = neutralny, PublicKeyToken = b03f5f7f11d50a3a "jest już rejestracją d dla biblioteki typów" C: \ Windows \ system32 \ mshtml.tlb ". TlbImp

: ostrzeżenie TI3016: Importer bibliotek typów nie mógł przekonwertować podpisu dla elementu "mshtml._userBITMAP.pBuffer". TlbImp:

ostrzeżenie TI3016: Importer bibliotek typów nie mógł przekonwertować podpisu dla elementu "mshtml._FLAGGED_BYTE_BLOB.abData". Tlbimp:

TI3015 ostrzeżenie: Przynajmniej jeden z argumentów dla 'mshtml.ICanvasPixel ArrayData.GetBufferPointer' nie może być marshaled przez marshaler wykonawczego. Takie argumenty będą zatem przekazywane jako wskaźnik i mogą wymagać manipulowania niebezpiecznym kodem. Tlbimp: Typ biblioteki importowane do d: \ ZTEMP \ Microsoft.mshtml.dll

  1. Czy te ostrzeżenia można zignorować?
  2. Czy nie ma prekompilowanej wersji tej biblioteki DLL dostępnej do pobrania z witryny Microsoft?
  3. Czy mogę rozpowszechniać tę bibliotekę z moją aplikacją?
  4. Dodając odwołanie do biblioteki DLL do .NET 3.5 projekcie nadano następujące ostrzeżenie:

„Microsoft.mshtml.dll”, lub jednego z jego zależności wymaga nowszej wersji .Net Framework niż ten określony w projekcie ...

Ponieważ to było ostrzeżenie i pozwól mi dodać odwołanie w jakikolwiek sposób, czy nadal mogę korzystać z niektórych funkcji .dll w .NET 3.5?

Dzięki

Odpowiedz

4

Są niebezpieczeństwa wersjonowanie Com, aka Piekło DLL. PIA zainstalowana w GAC jest najmniejszym wspólnym mianownikiem, dzięki czemu twój kod działa z każdą wersją IE 6 i późniejszych. Twoje podejście jest w przeciwnym razie zdrowe. Ostrzeżenia są prawdziwe, nie można używać oznaczonych użytkowników z poziomu języka skryptowego ani żadnego innego klienta, który opiera się na automatyzacji COM. Trzymaj się z dala od kłopotów, po prostu nie używając ich, a nie trudnych.

Po dodaniu odwołania wystąpił błąd, ponieważ użyto złej wersji programu Tlbimp.exe. Prawdopodobnie wersja .NET 4, sądząc po komunikacie o błędzie. Wersja zgodna z 3.5 znajduje się w c: \ program files \ microsoft sdks \ windows \ v6.0a \ bin. W przeciwnym razie ten, który otrzymasz, gdy użyjesz wiersza polecenia VS2008. Sprawdź, wpisując where tlbimp.exe w wierszu polecenia.

Pewne szanse na załadowanie PIA zamiast niestandardowego zestawu współdziałania. Nie jestem pewien, możesz stwierdzić od Fuslogvw.exe, skonfigurowany do rejestrowania wszystkich powiązań. Twoja/asmwersja powinna tego unikać. Najlepiej stworzyć całkowicie podrobiony numer wersji, więc nigdy nie będzie on pasował do wersji PIA, takiej jak 1.0.0.0

Oczywiście program nie będzie działał na komputerze użytkownika, gdy nie ma zainstalowanego IE9.