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

È stato utile?

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 " ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top