Avvio di una finestra di dialogo C # da un m ++ c ++ mfc attivo non gestito
Domanda
Mi è stato detto di scrivere una finestra di dialogo in C # che deve essere istanziata da una DLL c ++ non gestita. Lo facciamo in altri punti del nostro codice semplicemente aggiungendo una classe c ++ gestita al progetto C ++, quindi chiamando la DLL C # dalla classe c ++ gestita. Tuttavia sto scoprendo che non funziona per me da dove devo farlo. Penso perché il c ++ dll è un progetto MFCActiveX. Non appena ho impostato il clr su qualsiasi file in questo progetto, non verrà più registrato correttamente. Quando provo a registrarlo, ricevo tre errori, quindi un messaggio che è stato registrato. Tuttavia quando provo ad usarlo ottengo un 0x80040111 "ClassFactory non può fornire la classe richiesta" errore. Se qualcuno ha idea di quale sia il problema, lo apprezzerei molto. O devo essere in grado di realizzare questo (preferito) o dimostrare che non è possibile.
Grazie
Soluzione
Non riesco a vedere come un progetto MFCActiveX ti impedirebbe di creare la classe C # in questo modo. A meno che semplicemente non consenta l'aggiunta di una classe gestita.
Se non riesci a far funzionare il trucco di classe C ++ gestito, un'altra opzione è usare COM. È possibile registrare una sorta di factory nel progetto C # come oggetto COM. Supponi di dargli la seguente interfaccia
[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
void Create();
}
Dovresti anche creare una classe di supporto. Tuttavia, è possibile registrare l'assembly gestito e utilizzare COM per accedervi.
Altri suggerimenti
Ora devi registrarlo con " regasm " invece di " regsvr32 " ;.