Ich habe eine 32-Bit-ATL-COM-Komponente ohne eine Typbibliothek. Es hat eine Klassenfabrik für eine bestimmte Klasse, die mehrere Schnittstellen implementiert.Was ist erforderlich, um das Marshalling für eine COM-Schnittstelle zu aktivieren?
Wenn ich es als in-proc-Server verwende, funktioniert alles einwandfrei - die Client-Seite ruft CoCreateInstance() auf, das Objekt wird instanziiert und QueryInterface() ruft einen Zeiger auf eine angeforderte Schnittstelle ab. Aber wenn ich die Komponente in COM + lege, kann ich die Klasse nicht mehr instanziieren - CoCreateInstance() gibt jetzt E_NOINTERFACE zurück.
Ich glaube, das Problem ist, dass COM + Marshalling wegen Abwesenheit der Typbibliothek nicht durchführen kann - es hat keine Ahnung, wie es geht. Muss ich eine Typbibliothek generieren und registrieren, um dies zu beheben oder gibt es eine andere Möglichkeit?
Die ATL-Projektassistenten sind normalerweise so eingerichtet, dass sie eine Typelib haben, die als Ressource in die Projektausgabe eingebettet und bei den Co-Klassen registriert ist. – Richard
Ja, das weiß ich. Das Problem ist, dass ich eine von Microsoft bereits definierte Schnittstelle implementiere, für die keine Idl-Datei oder Typbibliothek bereitgestellt wird. Deshalb werde ich es schwer haben, die Typbibliothek voller benutzerdefinierter Typen neu zu erfinden. – sharptooth
fyi, es ist "Marshalling" im Kontext von COM, "Marshalling" im Kontext von Java. :-) –