Frage

Ich versuche, ein 3rd-Party-COM-DLL zu verwenden (Ich glaube nicht, seine eine .NET-Komponente) von einem .NET-Dienst ohne die COM-DLL Registrierung aber ich habe kein Glück so weit.

Ich habe die Manifest-Dateien von hier kopiert (http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com) als Ausgangspunkt verwendet werden (erzeugen ich die COM DLL manifestieren die referenzierte mt.exe / regsvr42.exe verwenden). Allerdings sehe ich nur die folgende Fehlermeldung:

Ausnahme: System.InvalidCastException Nachricht: Kann nicht Guss COM-Objekt des Typs 'LOGICLib.LogicClass' to Interface-Typ 'LOGICLib.ILogic'. Dieser Vorgang fehlgeschlagen, da der Interface-Aufruf auf der COM-Komponente für die Schnittstelle mit IID ‚{AAAAAAAA-AAAAAAAA-AAAA-AAAAAA3E8FB4}‘ konnte aufgrund des folgenden Fehlers: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)) . Quelle: Interop.LOGICLib bei LOGICLib.LogicSecuredClass.Connect (String IP, UInt16 Wert, Int32 & Result) bei My.Server.MyAssembly.Loader.Connect () in D: \ MyProject \ Source \ Server \ MyAssembly \ Loader.cs: Linie 461

Die Anwendung manifest wird nach der exe benannt, den Dienst gestartet wird - ich habe auch versucht, es nach der Montage zu benennen, die den COM-DLL aufruft. Ich habe versucht, auf der Kommandozeile starten und über Visual Studio-Debugger. Ich habe auch versucht, die Interop-Datei durch den Dritten geliefert verwenden und meine eigenen zu erzeugen.

(Anm. - Ich habe nur unter Windows XP bisher getestet)

Ich habe jetzt auf diese 2 Tage verbracht und haben überhaupt nicht voran. Alle Ideen, was ich kann übersehen haben?

War es hilfreich?

Lösung

Die Anwendung manifest wird nach der exe benannt, der den Dienst startet

Ja, das funktioniert nicht. Windows sucht immer für ein Manifest in der EXE-Datei selbst als eine nicht verwaltete Ressource eingebettet. Nur wenn es kann nicht jeder finden dort wird es sucht eine manifest-Datei auf der Festplatte. Das Problem ist, ein verwaltetes Programm mit VS2008 gebaut und bis hat bereits ein Manifest. Der Standard sagt: „Ich bin Vista bewusst“ nur.

Sie können diese für sich selbst überprüfen, indem Sie Datei + Öffnen + Datei verwenden und Ihre EXE auswählen. Öffnen Sie den RT_MANIFEST Knoten und doppelklicken Sie auf Ressource 1. Wenn Sie nicht sehen, Ihre reg freie COM Manifest Einträge dort dann wird es nicht funktionieren.

Um dies zu beheben, verwenden Sie Project + Neues Element hinzufügen und wählen Sie die Anwendungsmanifestdatei Elementvorlage. Sie werden den vorformulierten Manifest erhalten, kopieren und einfügen Ihre regfree COM Einträge dort.

Andere Tipps

Nun, von der Ausnahme, sind Sie einen gegossenes Fehler bekommen, wenn ein Objekt vom Typ LogicClass zu einem Schnittstellentyp von iLogic zu werfen versuchen. Sieht aus wie LogicClass nicht iLogic implementieren.

Sie haben nicht liefern, was die DLL ist oder wo Sie es bekommen, so dass Sie die beste Wahl ist in der Dokumentation für die Bibliothek suchen Sie nutzen versuchen. Nur eine wilde Vermutung, aber es sieht aus wie Sie es falsch sind implementiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top