Podczas wystąpienia szablonu w pełni - masz kompletny typ. Nie różni się od innych typów. Należy dołączyć nagłówek dla B
, a także połączyć w czasie kompilacji z plikiem lib
lub dynamicznie załadować bibliotekę dll, aby utworzyć łącze do definicji.
Czytasz ten artykuł: http://support.microsoft.com/kb/168958?
Oto krótkie podsumowanie tego, co testowałem (i to działało):
Tworzenie obojętne projekt DLL
- użyciu kreatora aplikacji Win32 Console wygenerować nagłówek dll/pliki źródłowe o nazwie:
template_export_test
- Dodano następujące elementy:
file: 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>;
file: template_export_test.cpp
template<class T>
CdllTest<T>::CdllTest(T t)
: _t(t)
{
std::cout << _t << ": init\n";
}
Tworzenie aplikacji testowej
- Użyj kreatora, aby utworzyć aplikację Win32 Console nazwie:
driver
- Edytuj ustawienia projektu łącznika według tego projektu:
- Dodaj do Linker> Ogólne> dodatkowe katalogi biblioteczne: ścieżka do
template_export_test.lib
- Dodaj do Linker> Wejście> Dodatkowe zależności:
template_export_test.lib
- Dołącz
template_export_test.h
w głównym pliku cpp
#include "c:\Documents and Settings\...\template_export_test.h"
using namespace std;
int main(int argc, char** argv) {
CdllTest<int> c(12);
}
"Próbowałem dodać kod poniżej w moim pliku .cpp, w którym chcę użyć B", co odkryłeś? czy dostałeś błędy? czy możesz zadać pytanie, co się wtedy wydarzyło? –