2009-03-03 5 views
1

On m'a dit d'écrire une boîte de dialogue en C# qui doit être instanciée à partir d'une DLL C++ non managée. Nous le faisons à d'autres endroits dans 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 parce que le C++ dll est un projet MFCActiveX. Dès que je place le clr sur n'importe quel fichier dans ce projet, il ne sera plus inscrit correctement. Quand je tente de l'enregistrer, je reçois trois erreurs, puis un message qu'il a enregistré. Cependant, lorsque j'essaie de l'utiliser, j'obtiens une erreur 0x80040111 "ClassFactory ne peut pas fournir la classe demandée". Si quelqu'un a une idée de ce que le problème est ici, je l'apprécierais grandement. Je dois soit être en mesure d'accomplir cela (préféré) ou prouver que ce n'est pas possible.Lancement d'une boîte de dialogue C# à partir d'un mfc C++ non géré x dll

Merci

Répondre

0

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

Si vous ne parvenez pas à faire fonctionner l'astuce de classe C++ gérée, vous pouvez également utiliser COM. Il est possible d'enregistrer une fabrique de sorte dans le projet C# en tant qu'objet COM. Dites lui donnent l'interface suivante

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

Vous auriez aussi de créer une classe de soutien aussi bien. Mais vous pouvez ensuite enregistrer l'assembly géré et utiliser COM pour y accéder.

+0

Merci, je l'ai maintenant travailler en utilisant cette méthode. Très utile merci. –

0

Vous devez maintenant enregistrer avec "regasm" au lieu de "regsvr32".