Question

Je suis en train d'utiliser une 3ème partie COM DLL (je ne crois pas que son composant .NET) à partir d'un service .NET sans enregistrer la DLL COM mais je vais avoir à ce jour pas de chance.

Je l'ai copié les fichiers manifestes d'ici (http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com) à utiliser comme point de départ (COM I généré DLL manifeste en utilisant le mt.exe / regsvr42.exe référencé). Cependant tout ce que je get est l'erreur suivante:

Exception: System.InvalidCastException Message: Impossible d'objet COM coulé de type 'LOGICLib.LogicClass' type d'interface 'LOGICLib.ILogic'. Cette opération a échoué parce que l'appel QueryInterface sur le composant COM pour l'interface avec IID '{AAAAAAAA-AAAAAAAA-AAAA-AAAAAA3E8FB4} a échoué en raison de l'erreur suivante: cette interface pris en charge (Exception de HRESULT: 0x80004002 (E_NOINTERFACE)) . Source: Interop.LOGICLib    à LOGICLib.LogicSecuredClass.Connect (String IP, UInt16 valeur Int32 et résultats)    à My.Server.MyAssembly.Loader.Connect () dans D: \ MyProject \ Source \ Server \ MyAssembly \ Loader.cs: ligne 461

Le manifeste d'application est nommé d'après l'exe qui commence le service - j'ai aussi essayé le nommer après l'assemblage qui appelle la DLL COM. J'ai essayé à partir de la ligne de commande et via le débogueur de Visual Studio. J'ai aussi essayé d'utiliser le fichier fourni Interop par le tiers et générer mon propre.

(Note -. Je n'ai testé sous Windows XP jusqu'à présent)

J'ai passé deux jours à ce moment et n'a pas progressé du tout. Toutes les idées que j'ai manqué?

Était-ce utile?

La solution

  

Le manifeste d'application est nommé d'après l'exe qui commence le service

Oui, cela ne fonctionne pas. Windows cherche toujours un manifeste dans l'EXE lui-même, intégré comme une ressource non gérée. Seulement quand il ne peut pas trouver un là-bas, il va chercher un fichier .manifest sur le disque. Le problème est, un programme géré construit avec VS2008 et a déjà en place un manifeste. L'un par défaut dit: « Je suis conscient Vista » seulement.

Vous pouvez vérifier par vous-même en utilisant Fichier + Ouvrir + Fichier et en sélectionnant votre EXE. Ouvrez le nœud RT_MANIFEST et double-cliquez sur la ressource 1. Si vous ne voyez pas vos entrées reg sans COM manifeste là alors il ne va pas au travail.

Pour résoudre, utilisez Project + Ajouter un nouvel élément et sélectionnez l'application Manifest modèle d'élément de fichier. Vous aurez le manifeste boilerplate, copiez et collez votre regfree COM entrées là-dedans.

Autres conseils

Eh bien, de l'exception, vous obtenez une erreur de casting lors d'une tentative de jeter un objet de type LogicClass à un type d'interface de iLogic. On dirait LogicClass n'implémente pas iLogic.

Vous n'a pas fourni ce que la DLL est ou si vous l'avez, vous êtes le meilleur pari est de regarder la documentation de la bibliothèque que vous essayez d'utiliser. Juste une supposition sauvage, mais il semble que vous l'appliquer de manière incorrecte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top