es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VS2019: Vinculando funciones de biblioteca estática a DLL

Tengo tres proyectos en mi solución de Visual Studio: proyecto A, proyecto B y proyecto C. Los proyectos A y B se compilan a A.lib y B.lib respectivamente, mientras que el proyecto C se compila a C.dll. Me gustaría tomar las funciones de A.lib y B.lib y ponerlas en C.dll. ¿Qué puedo hacer para lograrlo? Tengo la sensación de que estoy utilizando __declspec(dllexport) en el momento incorrecto o que me estoy olvidando de enlazar algo.

=== PROYECTO A ===

foo.h

#include
__declspec(dllexport) void foo();

foo.cpp

#include “foo.h”
void foo()
{
std::cout << “Foo!\n”;
}

=== PROYECTO B ===

goo.h

#include
__declspec(dllexport) void goo();

goo.cpp

#include “goo.h”
void goo()
{
std::cout << “Goo!\n”;
}

=== PROYECTO C ===

// ¿Qué va aquí?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para usar las funciones de A.lib y B.lib en C.dll, deberá seguir estos pasos:

    1. Agregue A.lib y B.lib como dependencias adicionales a Project C. Puede hacerlo haciendo clic derecho en Project C en el Explorador de soluciones, seleccionando Propiedades y luego navegando a Propiedades de configuración -> Vinculador -> Entrada. En el campo Dependencias adicionales, agregue A.lib;B.lib.
    2. En Project C, cree un archivo de encabezado que incluya las declaraciones de las funciones que desea utilizar de los Projects A y B. Por ejemplo, podría crear un archivo llamado helpers.h que se vea así:

    “`c ++
    #pragma once

    __declspec(dllimport) void foo(); // importar foo() de A.lib
    __declspec(dllimport) void goo(); // importar goo() de B.lib


    Asegúrese de incluir el atributo `__declspec(dllimport)` al declarar las funciones. Esto le dice al vinculador que estas funciones se importarán desde una DLL en tiempo de ejecución. 3. En Project C, cree un archivo fuente que incluya el encabezado helpers.h y defina cualquier función adicional que desee exportar de C.dll. Por ejemplo, podría crear un archivo llamado main.cpp que se vea así: ``` c ++ #include "helpers.h" __declspec(dllexport) void bar() { foo(); // llamar a foo() de A.lib goo(); // llamar a goo() de B.lib } // exportar bar() de C.dll

    Asegúrese de incluir el atributo __declspec(dllexport) al definir las funciones que desea exportar. Esto le dice al vinculador que estas funciones se exportarán desde C.dll.

    1. Configure la salida de compilación para Project C como una DLL. Puede hacerlo haciendo clic derecho en Project C en el Explorador de soluciones, seleccionando Propiedades y luego navegando a Propiedades de configuración -> General. Cambie el Tipo de configuración a Biblioteca dinámica (.dll).

    2. Compile la solución. Esto debería generar C.dll, que se puede usar para llamar a las funciones de Projects A y B.

Comments are closed.