Al crear una instancia de una plantilla totalmente - usted tiene un tipo completo. No es diferente de cualquier otro tipo. Debe incluir el encabezado para B
y también enlazar el tiempo de compilación con un archivo lib
o cargar dinámicamente el dll para vincularlo a la definición.
Has leído este artículo: http://support.microsoft.com/kb/168958?
He aquí un breve resumen de lo que he probado (y funcionó):
Crear un proyecto DLL ficticia
- Se utiliza el asistente de la aplicación de consola Win32 para generar la cabecera DLL/archivos fuente llamados:
template_export_test
- Agregado lo siguiente:
archivo: template_export_test.h
#ifndef EXP_STL
#define EXP_STL
#endif
#ifdef EXP_STL
# define DECLSPECIFIER __declspec(dllexport)
# define EXPIMP_TEMPLATE
#else
# define DECLSPECIFIER __declspec(dllimport)
# define EXPIMP_TEMPLATE extern
#endif
EXPIMP_TEMPLATE template class DECLSPECIFIER CdllTest<int>;
archivo: template_export_test.cpp
template<class T>
CdllTest<T>::CdllTest(T t)
: _t(t)
{
std::cout << _t << ": init\n";
}
Crear la aplicación de prueba
- Usar el asistente para crear una aplicación de consola Win32 denominada:
driver
- Editar la configuración del proyecto enlazadores de este proyecto:
- Añadir a Enlazador> General> Directorios de biblioteca adicionales: camino a
template_export_test.lib
- Añadir a Linker> entrada> dependencias adicionales:
template_export_test.lib
- Incluya la
template_export_test.h
en el archivo CPP principal
#include "c:\Documents and Settings\...\template_export_test.h"
using namespace std;
int main(int argc, char** argv) {
CdllTest<int> c(12);
}
"He intentado agregar el código a continuación en mi archivo .cpp donde quiero usar B" ¿qué has averiguado? ¿Recibiste errores? ¿Puedes poner en tu pregunta lo que sucedió entonces? –