none
COM über Console Application nutzen RRS feed

  • Frage

  • Hallo,

    Ich verwende ein COM selbst erstelltes COM Objekt in einer Webanwendung.

    Hierzu gehe ich wie folgt vor:
    1. COM erstellt
    2. COM mittels regsvr32 registriert
    3. mittels tlbimp einen Wrapper erzeugt
    --> Zwischenstand: CLSID registrierung vorhanden (Bspw.: {7984F155-25E0-461D-A048-E7ED6D8998AD}
    4. die so erzeugte Wrapper - dll als Verweis zum Webprojekt hinzugefügt
    --> Zwischenstand: Webanwendung läuft, Aufruf des COM Objektes über den Wrapper klappt.

    Jetzt möchte ich den selben Wrapper in einer Konsolenanwendung verwenden:
    1. Wrapper DLL der Anwendung hinzugefügt
    --> Beim erreichen des COM AUfrufs erhalte ich den Fehler:
    Die COM-Klassenfactory für die Komponente mit CLSID {7984F155-25E0-461D-A048-E7ED6D8998AD} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154.

    A:) Die CLSID stimmt mit der in der Registry überein. Wieso wird dann das Objekt nicht gefunden?

    TEST:
    1.) Ich lege eine Windows Forms ANwendung an und nehme den selben Wrapper (Testweise auch in Die GAC registriert)
    --> Hier funktioniert der Aufruf!?!?

    Frage:
    Was ist der Unterschied zwischen einer Windows Forms Anwendung und einer Konsolenanwendung?

    Ich habe mehrere Dinge probiert:
    - Signierung mit StrongName
    - VisualSTudio als Administrator ausführen
    - Konsolenanwendung - Sicherheit - ClickOnce - Voll vertrauenswürdig
    - Die kompillierte EXE der Konsolenanwendung über Adminberechtigtes CMD direkt ausführen

    Hat jemand eine Erklärung dazu?

    Ich verwende:
    - VS 2005
    - Auf Windows 7
    - Benutzerkontensteuerung auf low
    - .NET 2.0

    Donnerstag, 13. Januar 2011 11:04

Antworten

Alle Antworten

  • Hallo Mansur

    Ist es evtl ein 64-Bit Windows 7?
    Falls ja, in den Compiler-Einstellungen alle Projekte auf 32-Bit ('x86') fixieren  (nicht 'AnyCpu').

    Ansonst versuche auch mal
    Type.GetTypeFromCLSID
    http://msdn.microsoft.com/de-de/library/980t1w1t.aspx

    ob es Exception bzw  -null- zurückgibt?

    Weiter, sollte die  Main-Methode  ein Apartment-Attribute wie
    [MTAThreadAttribute]
    http://msdn.microsoft.com/en-us/library/system.mtathreadattribute.aspx

    zugeordnet haben.
    • Als Antwort markiert Mansur Esmann Donnerstag, 13. Januar 2011 11:30
    Donnerstag, 13. Januar 2011 11:21
  • Hallo Thomas,

    das war es: Any CPU

    Vielen Dank.

    Da stellt sich mir aber die Frage wieso es dann beim Web-Projekt lief!? Dort ist ja auch Any CPU festgelegt.
    Bdeutet das, daß Any CPU mit VS2005 auf Win7/64bit das Web automatisch als 32Bit startet? (Also ein VS2005 "Problem/Einschränkung")

    Auf dem WebServer muss ich das ApplicationPool (Aha) ja explizit auf 32 Bit festlegen, da die COM nur unter 32Bit läuft.

    Danke nochmal,

    Mansur

    Donnerstag, 13. Januar 2011 11:30