Com Klasse nicht registriert



  • Hallo Leute,

    hab mir eine eigen Com-Klasse in eine Extension-dll geschrieben. Und das ganze baut und linkt auch soweit. Nun wollte ich das ganze in meiner App ausprobieren aber ich bekomm nun immer einen Fehler bei CoCreateInstance.
    Das VS-Studio sagt dazu: Klasse nicht registriert wenn ich nach dem Fehler suche.
    Woran kann das liegen? wie registriere ich meine Klasse?
    Ich muss noch dazu sagen, dass ich das ganze nicht alles mit dem Studio gemacht habe sondern meißtens copy&paste und angepasst.

    Danke,

    Stalin



  • regsvr32 yourdll.dll



  • Hierbei erhalte ich einen Fehler:

    DllRegisterServer in bphone.dll failed.
    Return code was: 0x80029c4a

    So und nun?



  • So und laut VS-Studio beduetet das : Fehler beim Laden der Typbibliothek



  • regsvr32 ruft DllRegisterServer (bzw. DllUnregisterServer) auf. Diese sollen dann die entsprechenden Einträge in der Registry vornehmen (bzw. wieder löschen), um die Komponente mit CoCreateInstance etc. instanzieren zu können.

    Dir fehlen vom Rüberkopieren von der ATL wahrscheinlich a) Die Resourcen mit
    the Registrar-Scripten and b) das die Typelibrary-Resource

    In einem ATL-Projekt wird die .tlb vom MIDL-Pass gebaut. Diese ist wird im Resourcenscript referenziert, so daß die .tl erstmal als Resource vorliegt.

    ATL's _Module.RegisterServer lädt das Ding, und führt es aus.



  • Was steht denn in dieser tlb drin?
    Denn ich ändere ja die Methoden von meiner Implementation nachdem ich das ganze kopiert habe.
    Wa brauch ich von den resourcen? Das .rgs File hab ich kopiert...

    Wohin muss die tlb? Dahin wo meine resourcen sind?

    Gruß,

    Stalin



  • Die .tlb ist praktisch die "übersetzt IDL", da stehen die ganzen typ-informationen von einem COM-Server drin: welche Objekte er implementiert, welche Interfaces diese Objekte unterstützen, und wie die aussehen.

    Sie ist sozusagen ein "vorkompilierter Header für COM Server". (Die dinger lassen sich in VC6 furchtbar schön mit #import reinziehen - ich habe alle meine ATL-Projekte drauf umgestellt...)

    IIRC verwendet die ATL-IDispatchImpl die TypeLib um die TypeInfo von Dispatch-Schnittstellen zu liefern. Deswegen fehlen sie wahrscheinlich beim Erzeugen der Komponente.

    Wie du sie nun un dein Projekt reinbekommst - viel Glück... Ich hab keine Ahnung. 😞

    Ich weiß auch nicht, ob es probleme mit der ATL/MFC Extension DLL gibt, die sich nicht so einfach lösen lassen.


Anmelden zum Antworten