2010-02-01 6 views
0

J'ai enregistré mon serveur COM natif très simple et mon client COM natif peut appeler la méthode COM avec succès. Toutefois, mon client COM géré a envoyé l'erreur ci-dessous:Le client géré d'un serveur COM a lancé InvalidCastException

Impossible de transformer l'objet COM de type 'DevicesLib.MyComClass' en type d'interface 'DevicesLib.IMyComInterface'. Cette opération a échoué car l'appel QueryInterface sur le composant COM pour l'interface avec IID '{503DDA5C-F8A2-4273-810F-3855EE0F2B78}' a échoué en raison de l'erreur suivante: Aucune interface prise en charge (Exception de HRESULT: 0x80004002 (E_NOINTERFACE)) .

J'ai utilisé tlbimp.exe pour générer une DLL d'interopérabilité avec délai. Mon OS est 64 bits Windows Server 2008 R2.

Une idée?

Merci Leon

Répondre

1

Après je décore [STAThreadAttribute] pour la main(), il a travaillé.

1

Votre interface ne doit pas être enregistrée pour le marshaling. Votre CoClass est probablement enregistrée comme nécessitant une STA. Sans le STAThreadAttribute, le thread principal est MTA. La création de l'objet COM le place dans un thread STA différent, puis essaie de ramener le pointeur d'interface vers vous.