2010-03-10 6 views
5

Bedeutet eine System.Runtime.InteropServices.COMException von 0x80040154 immer, dass die Klasse nicht registriert ist? Ich erhalte eine COMException, die besagt, dass "das Abrufen der COM-Klassenfactory für Komponente mit CLSID {29131539-2EED-1069-BF5D-00DD011186B7} aufgrund des folgenden Fehlers fehlgeschlagen ist: 80040154." Es versucht, Interop.Domino.dll zu laden, das eine Referenz ist, die ich von der COM-Registerkarte der Add Reference namens "Lotus Domino Objects" erhielt, die domobj.tlb im Notes-Programmordner verweist.Ist eine COMException von 0x80040154 immer 'Klasse nicht registriert'?

Ich habe den Code vor Jahren geschrieben - es ist das einzige, was ich jemals mit interop gemacht habe und es ist fair zu sagen, dass ich mich nie wirklich damit beschäftigt habe.

Ich sehe diesen Fehler wieder nach dem Verschieben des Codes auf einen Server 2008 R2 (so ist es x64). Es wurde auf XP geschrieben und lief 2003 (beide x86). Um das Problem zu diagnostizieren, baute ich eine Win7 x86 (weil es keine R2 x86) Box und es funktionierte. Ich habe auch eine 2003 x64-Box gebaut und es schlägt mit dem gleichen Fehler fehl, also sieht es so aus, als ob es durch den Wechsel zur x64-Architektur verursacht wurde. Gibt es etwas, das ich tun sollte, wenn ich interop mache, um x86 COM DLLs auf x64-Maschinen laufen zu lassen?

Antwort

2

Achten Sie auf die Registrierung von 32-Bit-Komponenten mit dem richtigen Register (C: \ Windows \ SysWOW64 \ regsvr32.exe).
Wenn Sie sich bereits bei der 64-Bit-Version registriert haben, heben Sie die Registrierung jeder DLL mit derselben Version auf.

Weitere Hilfe finden Sie hier Team is Going from XP32 to XP64 for .NET Development - Any Gotchas?

Viel Glück

+0

Ja, das ist vorhanden, danke. Und danke für den Link. – ssg31415926

4

Ich hatte das gleiche Problem, eine .NET-Anwendung auf Windows 7 x64 zu erstellen und auszuführen versuchen, die interop.domino.dll genannt, die 32 nur Bit.

Um zu beheben, rekompilierte ich die .NET-Anwendung speziell als x86 ausgeführt werden, wenn auf x64-Betriebssystemen ausgeführt.

Ich verwendete Visual Studio 2010 Express Edition, die speziell für x86-Plattformen zielgerichteter ist als die kostenpflichtigen Versionen.

Die Lösung war:

  1. Klicken Sie auf Extras> Optionen> PROJEKTE UND LÖSUNGEN
  2. Aktivieren Sie das Feld „Zeige erweiterte Konfigurationen bauen“ und klicken Sie auf OK
  3. Klicken Sie auf Extras> Einstellungen> Kontroll Experten-Einstellungen zu sehen die Build-Konfigurationsmanager
  4. klicken Sie BUILD> Configuration Manager die Plattform Dropdown-Liste X86 wählen und zU
  5. nun das Projekt
  6. Wiederaufbau klicken
2

Es gibt eine IBM Technote, die angibt, dass die Domino COM-Klassen auf einem 64-Bit-Betriebssystem nicht unterstützt werden. Siehe https://www-304.ibm.com/support/docview.wss?uid=swg21454291 Es sieht so aus, als würden Sie sogar, indem Sie den Code als x86 ausführen (wie in mpownies Antwort), einige Risiken eingehen.