Según el título, intento crear una DLL usando C y vincularla desde un proyecto de C++. Leí y seguí diferentes tutoriales en Internet, pero cada vez me falta algo y no entiendo qué.Crear una DLL en C y vincularla desde un proyecto de C++
Aquí es lo que hice, paso a paso:
he creado un nuevo proyecto Win32, llamado testlib
, a continuación, desde el asistente, he elegido "DLL" y "proyecto vacío".
añade una cabecera:
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
añade una fuente; ya que yo quiero que sea una fuente de C leí que debería cambiar el nombre del archivo .cpp simplly en .c, por lo
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
Construir tuvo éxito.
Ahora me gustaría utilizar mi dll útil en otro proyecto.
Luego: nuevo proyecto (testlibUse
). Esta vez seleccioné "Proyecto vacío".
No hay necesidad de añadir una cabecera, que acaba de crear una fuente de CPP
//main.cpp
#include <testlib.h>
int main() {
hello();
}
continuación:
añadí la ruta de la carpeta en la que está
testlib.dll
en Propiedades-> VC++ directorios-> directorios ejecutablesque añade la ruta de la carpeta en la que está
testlib.h
en Propiedades-> VC++ directorios-> Incluir directorioshe añadido el camino a
testlib.lib
(extensión incluido) en Propiedades-> Linker-> Input-> dependencias adicionales
he tratado de construir, pero tengo un error de vinculador:
LINK : C:\path\testlibUse\Debug\testlibUse.exe not found or not built by the last incremental link; performing full link
main.obj : error LNK2019: unresolved external symbol "void __cdecl hello(void)" ([email protected]@YAXXZ) referenced in function _main
C:\path\testlibUse\Debug\testlibUse.exe : fatal error LNK1120: 1 unresolved externals
Si vuelvo a testlib
, cambio el nombre testlib.c
en testlib.cpp
y reconstruyo el dll, entonces puedo construir testlibUse
pero aparece el error "dll no encontrado" en el tiempo de ejecución.
Intenté también cambiar las configuraciones de ambos proyectos en "Versión" (cambiando la ruta donde sea necesario), pero nada cambió.
Perdón por la larga publicación, pero creo que fue necesario escribir exactamente lo que hice.
¿Alguna sugerencia?
Además, ¿hay algún parámetro de configuración que deba cambiar si quiero usar mi dll en un proyecto de Qt?
pero me da un error "No se encontró dll" en tiempo de ejecución ... no fue suficiente para agregar la ruta de acceso al archivo DLL en Propiedades-> VC++ directorios-> directorios ejecutables? – Saphrosit
@Saphrosit: No, a mi leal saber y entender, eso no afectaría el funcionamiento de la aplicación. Lea la descripción en esa página de propiedades; afecta el hallazgo de binarios al construir el proyecto. Necesita el archivo DLL que se va a encontrar (por ejemplo, a través de la variable de entorno PATH) en tiempo de ejecución. –