J'ai une DLL propriétaire très ancienne (VC++ 5.0) que je dois utiliser depuis C# (Visual Studio 2010). L'exemple spécifie que pour accéder à ce composant j'ai besoin d'appeler CreateDispatch("application")
qui indique vers OLE.Appel d'un ancien composant OLE à partir de C#
Voici l'exemple de code (C++):
IComponentServer Server;
Server.CreateDispatch("Component.Server");
J'ai ajouté une référence dans Visual Studio au fichier TLB je l'ai, et je peux importer son espace de noms avec succès, mais IComponentServer
n'a pas de méthode appelé CreateDispatch
.
Quelle est la bonne approche pour créer l'instance d'un composant OLE via C#?
Merci JaredPar. Une idée de pourquoi je pourrais obtenir une exception InvalidCastException avec le code que vous avez fourni? Cette opération a échoué car l'appel QueryInterface sur le composant COM pour l'interface avec le IID '{BAA135B2-F931-11D0-9C14-0060973155F0}' a échoué en raison de l'erreur suivante: Aucune interface prise en charge (Exception de HRESULT: 0x80004002 (E_NOINTERFACE)). – jbx
@jbx, la cause la plus probable est que les bibliothèques de types pour l'assembly COM ne sont pas enregistrées correctement. – JaredPar
J'ai essayé regasm qui a échoué en disant que ce n'est pas un assembly .Net valide (à vrai dire, c'est une ancienne bibliothèque de l'âge de VC++ 5.0) J'ai essayé regtlibv12.exe qui a déclaré qu'il a enregistré le TLB avec succès. Cependant même problème. Des idées que je pourrais faire? – jbx