Lancement d’une boîte de dialogue C # à partir d’un fichier dll actif x dll non géré

StackOverflow https://stackoverflow.com/questions/606270

  •  03-07-2019
  •  | 
  •  

Question

On m'a dit d'écrire une boîte de dialogue en C # qui doit être instanciée à partir d'une dll non gérée c ++. Nous faisons cela à d’autres endroits de notre code en ajoutant simplement une classe c ++ gérée au projet C ++, puis en appelant la dll C # à partir de la classe c ++ gérée. Cependant, je constate que cela ne fonctionne pas pour moi d'où je dois le faire. Je pense que la DLL c ++ est un projet MFCActiveX. Dès que je mets la clé sur n'importe quel fichier de ce projet, il ne sera plus enregistré correctement. Lorsque je tente de l'enregistrer, j'obtiens trois erreurs, puis un message l'enregistrant. Cependant, lorsque j'essaie de l'utiliser, j'obtiens un 0x80040111 "ClassFactory ne peut pas fournir la classe demandée". Erreur. Si quelqu'un a une idée du problème, je l'apprécierais grandement. Je dois soit être capable d'accomplir ceci (préféré), soit prouver que ce n'est pas possible.

Merci

Était-ce utile?

La solution

Je ne vois pas comment un projet MFCActiveX pourrait vous empêcher de créer la classe C # de cette manière. À moins que cela ne permette simplement pas l'ajout d'une classe gérée.

Si vous ne pouvez pas utiliser l'astuce de la classe C ++ gérée, une autre option consiste à utiliser COM. Il est possible d'enregistrer une usine dans le projet C # en tant qu'objet COM. Dites-lui l'interface suivante

[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
  void Create(); 
}

Vous devez également créer une classe de support. Mais vous pouvez ensuite enregistrer l'assembly géré et utiliser COM pour y accéder.

Autres conseils

Vous devez maintenant l'enregistrer avec & reg; regasm " au lieu de "regsvr32".

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