Pregunta

Al crear una DLL con Visual C ++ 2008 tengo un par de opciones. Puedo crear una " Class Library " , que entiendo realmente me dará una biblioteca .Net que usa la extensión CLI (administrada) de C ++.

Como no quiero eso, y asumí que necesito un archivo .LIB estático para vincularlo con otro proyecto ejecutable de Windows de Visual C ++, en su lugar, elijo " Proyecto Win32 " y, en el panel de Configuración de la aplicación, especifique una DLL de C ++ (sin MFC).

Esto creará un proyecto con un archivo .cpp que se supone que es donde defino " las funciones exportadas para la aplicación DLL " .

Esto tampoco parece ser lo que quiero. Básicamente, lo que estoy buscando es el equivalente en C ++ nativo de lo que sería, en C # .NET sería un conjunto de biblioteca de clases. Quiero empaquetar algunas clases en una DLL, luego hacer que un proyecto .EXE use las clases de DLL incluyendo los archivos de encabezado del proyecto DLL y un enlace con un .LIB para resolver las referencias.

¿Cuál es la forma habitual de hacer esto?

¿Fue útil?

Solución

Lo estás haciendo bien. Lo que necesitará es marcar sus clases con __declspec (dllexport) Para que estén disponibles desde fuera del proyecto. Cuando genere el proyecto, generará tanto un .DLL como un .LIB.

Otros consejos

  • Crear un nuevo proyecto
  • Visual C ++: Win32: Proyecto Win32
  • Configuración de la aplicación, seleccione DLL y marque 'Exportar símbolos "

Cuando genere el proyecto, eliminará una clase exportada, normalmente llamada C {MyLib}.

Tienes razón para crear una DLL de C ++ (sin MFC). Puede crear sus clases y los puntos de entrada que defina se exportarán desde esa DLL para su uso con otro código C ++ (por ejemplo, una aplicación Win32 escrita en C ++).

Dado que el compilador modifica automáticamente los nombres de C ++ a valores extraños y maravillosos, no es práctico exportarlos porque los clientes de la DLL son, por ejemplo, programas en C. Pero si todo está en C ++, debería estar bien.

Si crea algunas clases, puede elegir que se vinculen dinámicamente (como una DLL), pero necesitará una biblioteca de importación (creada para usted automáticamente) que contiene las definiciones de los símbolos de la DLL. También puede elegir vincular estáticamente a su código desde una aplicación; en este caso, terminaría con una biblioteca estática (también .LIB) que contiene el código de objeto real en sus clases en lugar de símbolos en una DLL.

La ventaja de una DLL es, por supuesto, que si escribe varias aplicaciones utilizando su biblioteca, todas pueden compartir la DLL; con una biblioteca estática, cada una contendría una copia del código de su biblioteca.

Creo que este artículo describe lo que estás tratando de hacer: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

Personalmente también prefiero exportar funciones de C (en lugar de C ++), donde hago este puntero explícito para evitar tener que preocuparme por la decoración del nombre del método específico del compilador y exponer las funciones generadas por el compilador.

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