2009-08-01 9 views
0

..für einen Out-of-Process-Server, oder kann ich eine Dispatch-Schnittstelle aufrufen, ohne einen Proxy/Stub zu registrieren?Erfordert eine "reine" IDispatch-Schnittstelle eine Proxy/Stub-DLL?

Die Schnittstelle in Frage ist sehr hohe Niveau, so dass Leistung ist kein Thema, und ich konnte die ganze Sache Registrierung frei, was ein große ist in über

+0

Sie möchten also den Standard-Marshaller verwenden, um den Proxy/Stub-Wrapper automatisch * für Sie * zu erstellen. Frage: Wie identifizieren Sie das IDispatch dieser Coclass, das ohne Registrierungseinträge für die Co-Klasse umschlossen werden soll? – wqw

+0

Nein, Frage ist wenn ich * es * benutzen kann. – peterchen

Antwort

1

Ich bin ziemlich sicher, dass Sie keine benutzerdefinierte Proxy/Stub-DLL bereitstellen müssen, wenn Sie Ihre Schnittstelle (n) auf automatisierungskompatible Typen beschränken. In diesem Fall kann das System den Automations-Marshaller verwenden und benötigt keine zusätzliche Hilfe. Ich glaube, dass die automatisierungskompatiblen Typen die Typen sind, die in eine VARIANT, z.B. einfache POD-Typen, BSTR s und dergleichen.

Ich fand this KB article, die einige Diskussionen über die Automatisierung Marshaller hat, obwohl es nicht speziell auf Ihre Frage ausgerichtet ist. Es listet die kompatiblen Typen zumindest auf. Es erwähnt auch, dass Sie den Automationsmarshaler in der Registrierung für Ihre Komponente spezifisch identifizieren müssen, aber nach meiner Erfahrung ist dies nicht notwendig - Ihre Laufleistung kann variieren.

Schließlich müssen Sie möglicherweise auch IProvideClassInfo implementieren; Ich verwende normalerweise die Implementierung von ATL.

0

Sie nur einen Proxy/Stub-DLL muß, wenn Ihre Schnittstelle muss gemarshallt werden. Das bedeutet, wenn Ihr COM-Server in Bearbeitung ist und die Schnittstelle nicht zwischen den Appliances übergeben wird und Sie nicht von .Net oder einer anderen Situation, in der es geroutet werden muss, aufgerufen werden, brauchen Sie keine Proxy/Stub-DLL.