Inicio de un cuadro de diálogo de C # desde un archivo no administrado C ++ mfc active x dll

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Me han dicho que escriba un cuadro de diálogo en C # que debe ser instanciado desde un dll c ++ no administrado. Hacemos esto en otros lugares de nuestro código simplemente agregando una clase de c ++ administrada al proyecto de C ++, y luego llamando a la dll de C # desde la clase de c ++ administrada. Sin embargo, estoy descubriendo que eso no funciona para mí desde donde tengo que hacerlo. Creo que porque el d ++ c ++ es un proyecto MFCActiveX. Tan pronto como establezca el clr en cualquier archivo en este proyecto, ya no se registrará correctamente. Cuando intento registrarlo, obtengo tres errores, luego un mensaje que registró. Sin embargo, cuando trato de usarlo, obtengo un 0x80040111 " ClassFactory no puede suministrar la clase solicitada " error. Si alguien tiene alguna idea de cuál es el problema aquí, se lo agradecería enormemente. Necesito poder lograr esto (preferido) o probar que no es posible.

Gracias

¿Fue útil?

Solución

No puedo ver cómo un proyecto MFCActiveX le impediría crear la clase C # de esta manera. A menos que simplemente no permita que se agregue una clase administrada.

Si no puede hacer que funcione el truco de clase de C ++ administrado, otra opción es usar COM. Es posible registrar una fábrica de clases en el proyecto C # como un objeto COM. Di dale la siguiente interfaz

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

También deberías crear una clase de respaldo también. Pero luego puede registrar el ensamblaje administrado y usar COM para acceder a él.

Otros consejos

Ahora debe registrarlo con " regasm " en lugar de " regsvr32 " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top