visual tutorial studio microsoft how files crear archivos c++ visual-studio-2010 .lib

tutorial - La biblioteca de vínculos dinámicos no genera un archivo.lib cuando se compila(Visual Studio C++ Express)



microsoft dll (1)

Como parte del aprendizaje de C ++, escribí una biblioteca de clases simple + aplicación que hace referencia a ella. Todo se compila, excepto que la biblioteca de clases no genera un archivo .lib, lo que da como resultado que la aplicación arroje un "ENLACE: error fatal LNK1104: no se puede abrir el archivo". Esto parece muy razonable; obviamente, si un archivo necesario no está allí, hay un error y es fatal. (Nota al margen: todavía no tengo un libro)

Entonces, fui buscando razones por las que un archivo .lib podría no ser generado. Mi búsqueda-fu, por cierto, es bastante débil. Todo lo que encontré fue que, si la biblioteca no tenía ninguna etiqueta __declspec (dllexport), no exportaría una .lib.

Ahora publicaré los contenidos de encabezado y .cpp de la biblioteca de clase (una clase simple de "Consola" con un método de "escritura (std :: cadena)").

Encabezamiento:

// Extensions.h #pragma once #include "stdafx.h" namespace Extensions { __declspec(dllexport) class Console { public: __declspec(dllexport) static void Write(std::string text); }; }

No estoy seguro si necesito etiquetar la función cuando etiqueté la clase, pero puedo verificarlo cuando funciona.

Y el archivo .cpp:

// This is the main DLL file. #include "stdafx.h" // #include "Console.h" namespace Extensions { void Console::Write(std::string text) { std::cout << text.c_str(); } }

Lo he comprobado y está configurado para generar una biblioteca de enlaces dinámicos.

Gracias.


Aquí hay un código de muestra que demuestra cómo exportar correctamente una clase. Preste atención a la macro CONSOLETEST_EXPORT. Esta es la parte que falta de tu solución. Debe definir esta macro en su proyecto DLL y dejarla indefinida en los proyectos que hacen referencia a esta dll.

// MAIN.CPP - TestApplication #include <iostream> #include "ConsoleTest.h" int main(int argc, char** argv) { std::cout << "Hello World" << std::endl; ConsoleTest test; test.Write(); ConsoleTest::StaticWrite(); system("pause"); } // ConsoleTest.h - TestDll #include <iostream> #ifdef CONSOLETEST_EXPORT #define CONSOLETEST_API __declspec(dllexport) #else #define CONSOLETEST_API __declspec(dllimport) #endif class CONSOLETEST_API ConsoleTest { public: ConsoleTest(); ~ConsoleTest(); void Write(); static void StaticWrite(); }; // ConsoleTest.cpp - TestDll #include "ConsoleTest.h" ConsoleTest::ConsoleTest() { } ConsoleTest::~ConsoleTest() { } void ConsoleTest::Write() { std::cout << "Instance Write" << std::endl; } void ConsoleTest::StaticWrite() { std::cout << "Static Write" << std::endl; }

Echa un vistazo a este artículo en codeproject para más detalles. HowTo: Exportar clases de C ++ desde una DLL